
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
но блин, кодец так себе
надо попробовать понять как его парсит ерр-клиент