@rubylang

Страница 255 из 1684
Nikolay
30.07.2016
22:33:08
или там неймспейсы могут быть в елементах еще?

ojab
30.07.2016
22:33:18
да

xmlns — объявление неймспейса

Nikolay
30.07.2016
22:33:57
а где бы про это почитать по людски

Google
Nikolay
30.07.2016
22:34:02
нахрена такие извраты нужны

ojab
30.07.2016
22:34:18
google://xpath, хз что ещё

стандарт xml

но там куча всякого говна вроде схем и прочего

Nikolay
30.07.2016
22:34:40
вот я ж о том же

шо хр с какой стороны к этому подойти

так это получается что я дошел до уровня cd?

в этом хмле?

тоесть domain:name avail="0"> => values = 0 ?

content = domain.net

ojab
30.07.2016
22:37:38
'//d:chkData|cd' выдаст cd, да

values дёргать не ок

Nikolay
30.07.2016
22:38:04
а как получить avail?

Google
ojab
30.07.2016
22:38:07
лучше xpath'ем запрос строить, чтобы он нужное значение выдал

Nikolay
30.07.2016
22:38:45
<domain:cd> <domain:name avail="0">example.net</domain:name></domain:cd>

мне вот этот кусок нужен avail + контент

ojab
30.07.2016
22:40:28
ща гляну

Nikolay
30.07.2016
22:41:56
дяк

ojab
30.07.2016
22:43:24
x.xpath('//d:chkData/d:cd/d:name[text()="example.net"]/@avail', d: "urn: ietf:params:xml:ns:domain-1.0").first

ну или тупо x.xpath('//d:name[text()="example.net"]/@avail', d: "urn: ietf:params:xml:ns:domain-1.0")

.first.value

nokogiri чото, похоже, в любом случае возвращает найденные элементы массивом

даже лучше .xpath('//d:name[text()=$domain]/@avail', { d: "urn: ietf:params:xml:ns:domain-1.0" }, { domain: 'example.net' }), дабы экранировать ввод

Nikolay
30.07.2016
22:50:19
domain = @doc.xpath('//d:chkData|cd', d: "urn:ietf:params:xml:ns:domain-1.0").first

в нем есть attributes = [ #(Attr:0x2ab84ddd79a0 { name = "avail", value = "0" })],

ojab
30.07.2016
22:50:47
.value

тут уже понятно, что мы получим нужный аттрибут

Nikolay
30.07.2016
22:51:15
а хер

domain.class => Nokogiri::XML::Element

с чертовой кучей говнища

ojab
30.07.2016
22:51:53
эм

а

ты не |cd делай

Google
ojab
30.07.2016
22:52:16
|cd нужно чтобы получить cd

.xpath('//d:name[text()=$domain]/@avail', { d: "urn: ietf:params:xml:ns:domain-1.0" }, { domain: 'example.net' })

выдаст Nokogiri::XML::Attr

Nikolay
30.07.2016
22:52:56
да блин, я ж не знаю содержимое этого чертового ехаммле.нет

там может быть любая ересь.

ojab
30.07.2016
22:53:49
x.xpath('//d:chkData/d:cd/d:name[text()=$domain]/@avail', { d: "urn: ietf:params:xml:ns:domain-1.0" }, { domain: 'example.net' })

Nikolay
30.07.2016
22:54:17
=> []

ojab
30.07.2016
22:54:19
будет искать от корня chkData -> cd -> name с текстом $domain и выдирать оттуда аттрибут avail

Nikolay
30.07.2016
22:54:40
вот блин. вместо example.net у меня может прилететь любая ересь

в том то и штука

ojab
30.07.2016
22:54:50
оно экранирует же

если параметром указывать

Nikolay
30.07.2016
22:55:32
еще. раз. мне от сервера в сокете вместое example.net может прилететь ЛЮБОЕ имчя домена

как я к нему привяжусь?

вот в чем проблема

ojab
30.07.2016
22:56:18
эм, ты же знаешь что запрашиваешь, не?

Nikolay
30.07.2016
22:56:25
нет. реально не знаю

я запускаю пачку запросов и вычитываю сокет

в каком порядке мне прилетит ответ я в душе не гребу

ojab
30.07.2016
22:57:05
гм, ну тогда '//d:chkData/d:cd/d:name' и оно вернёт массив имён

Google
ojab
30.07.2016
22:57:16
с помощью .text вытаскивается имя

ну и '@avail' вытаскивает avail

хотя лучше, вестимо, .xpath('text()').text заюзать, на случай если там прилетит какая-нибудь фигня

Nikolay
30.07.2016
22:59:36
да хер оно работает

тот же нодесет прилетает

a = domain.xpath('//d:chkData|cd/d:name', d: "urn:ietf:params:xml:ns:domain-1.0")

a.class => Nokogiri::XML::NodeSet

ojab
30.07.2016
23:00:31
/d:cd вместо |cd

Nikolay
30.07.2016
23:01:12
о

a = domain.xpath('//d:chkData/d:cd/d:name', d: "urn:ietf:params:xml:ns:domain-1.0") => [#<Nokogiri::XML::Element:0x2ab84dddc540 name="name" namespace=#<Nokogiri::XML::Namespace:0x2ab84dca7148 prefix="domain" href="urn:ietf:params:xml:ns:domain-1.0"> attributes=[#<Nokogiri::XML::Attr:0x2ab84ddd79a0 name="avail" value="0">] children=[#<Nokogiri::XML::Text:0x2ab84dda4ec4 "example.net">]>]

Admin
ERROR: S client not available

Nikolay
30.07.2016
23:02:55
a.each {|n| puts n} <domain:name avail="0">example.net</domain:name>

почти добрался )

> a = domain.xpath('//d:chkData/d:cd/d:name', d: "urn:ietf:params:xml:ns:domain-1.0").first => #(Element:0x2ab84dddc540 { name = "name", namespace = #(Namespace:0x2ab84dca7148 { prefix = "domain", href = "urn:ietf:params:xml:ns:domain-1.0" }), attributes = [ #(Attr:0x2ab84ddd79a0 { name = "avail", value = "0" })], children = [ #(Text "example.net")] }) > a.count => 1 > a.first => ["avail", "0"] > a.text => "example.net"

ojab
30.07.2016
23:12:15
a.xpath('@avail').value

Nikolay
30.07.2016
23:15:28
хм. а я вот сейчас сделал запросик на несколько доменов

https://gist.github.com/foxmuldercp/ae824bbc1773e74a6f5dae89a2825c95

a.first.xpath('@avail') => [#<Nokogiri::XML::Attr:0x2ab84d9efaa4 name="avail" value="0">] a.first.xpath('@avail').class => Nokogiri::XML::NodeSet

a.count => 3 по числу доменов

> a.first.values => ["0"] > a.first.name => "name"

Google
Nikolay
30.07.2016
23:22:10
> a.first.text => "example.net"

ojab ?

ojab
30.07.2016
23:22:55
а в чём проблема?

а, вижу

ща гляну

Nikolay
30.07.2016
23:23:09
ты считаешь такой доступ нормально?

ojab
30.07.2016
23:25:22
a.first.xpath('@avail').value & a.first.xpath('text()').text

я считаю что применительно к xml'ю это ок

но выглядит абсолютно угрёбищно, как и практически любая работа с xml'ем

a.first.values тебе выдаст непонятно что, если будет несколько аттрибутов

a.first.text выдаст тебе непонятно что, ели будут вложенные ноды с текстом

Nikolay
30.07.2016
23:28:36
не, смотри. у меня в a вполне понятный список <domain:name avail="0">example.net</domain:name></domain:cd><domain:cd> <domain:name avail="0">example.org</domain:name></domain:cd>

по first я просто пошел по первому элементу

но насчет тестов с вариантом domain:reason надо проверить, в мане пишется что там может быть причина фейла проверки

ojab
30.07.2016
23:30:23
вполне конкретный список это ок, но входным данным доверять не стоит

Nikolay
30.07.2016
23:30:48
a.first.xpath('@avail').value NoMethodError: undefined method `value' for [#<Nokogiri::XML::Attr:0x2ab84d9efaa4 name="avail" value="0">]:Nokogiri::XML::NodeSet

без xpath работает

ojab
30.07.2016
23:31:25
хех

.first.value

Nikolay
30.07.2016
23:31:39
угу

values

но блин, кодец так себе

надо попробовать понять как его парсит ерр-клиент

Страница 255 из 1684