2013-11-30 5 views
0

Im, использующий савонный камень для получения информации об XML.Как получить/получить идентификатор из ответа xml

XML-ответ, как этот

"<?xml version='1.0' encoding='UTF-8'?><S:Envelope xmlns:S=\"http://schemas.xmlsoap.org/soap/envelope/\"><S:Body><Divisions xmlns=\"urn:description7a.services.chrome.com\"><responseStatus responseCode=\"Successful\" description=\"Successful\"/><division id=\"1\">Acura</division><division id=\"44\">Aston Martin</division><division id=\"4\">Audi</division><division id=\"45\">Bentley</division><division id=\"5\">BMW</division><division id=\"6\">Buick</division><division id=\"7\">Cadillac</division><division id=\"8\">Chevrolet</division><division id=\"9\">Chrysler</division><division id=\"11\">Dodge</division><division id=\"46\">Ferrari</division><division id=\"59\">FIAT</division><division id=\"13\">Ford</division><division id=\"15\">GMC</division><division id=\"16\">Honda</division><division id=\"17\">Hyundai</division><division id=\"18\">Infiniti</division><division id=\"19\">Isuzu</division><division id=\"20\">Jaguar</division><division id=\"21\">Jeep</division><division id=\"22\">Kia</division><division id=\"47\">Lamborghini</division><division id=\"23\">Land Rover</division><division id=\"24\">Lexus</division><division id=\"25\">Lincoln</division><division id=\"48\">Lotus</division><division id=\"53\">Maserati</division><division id=\"26\">Mazda</division><division id=\"27\">Mercedes-Benz</division><division id=\"2\">MINI</division><division id=\"29\">Mitsubishi</division><division id=\"30\">Nissan</division><division id=\"34\">Porsche</division><division id=\"57\">Ram</division><division id=\"49\">Rolls-Royce</division><division id=\"52\">Scion</division><division id=\"42\">Smart</division><division id=\"37\">Subaru</division><division id=\"38\">Suzuki</division><division id=\"56\">Tesla</division><division id=\"39\">Toyota</division><division id=\"40\">Volkswagen</division><division id=\"41\">Volvo</division></Divisions></S:Body></S:Envelope>" 

я хочу разделить идентификатор и сделать имя.

, как я могу это сделать

Edited

я сохранили XML в переменной, как

xml = 1.9.3p194 :063 > xml 
=> "<?xml version='1.0' encoding='UTF-8'?><S:Envelope xmlns:S=\"http://schemas.xmlsoap.org/soap/envelope/\"><S:Body><Divisions xmlns=\"urn:description7a.services.chrome.com\"><responseStatus responseCode=\"Successful\" description=\"Successful\"/><division id=\"1\">Acura</division><division id=\"44\">Aston Martin</division><division id=\"4\">Audi</division><division id=\"45\">Bentley</division><division id=\"5\">BMW</division><division id=\"6\">Buick</division><division id=\"7\">Cadillac</division><division id=\"8\">Chevrolet</division><division id=\"9\">Chrysler</division><division id=\"11\">Dodge</division><division id=\"46\">Ferrari</division><division id=\"59\">FIAT</division><division id=\"13\">Ford</division><division id=\"15\">GMC</division><division id=\"16\">Honda</division><division id=\"17\">Hyundai</division><division id=\"18\">Infiniti</division><division id=\"19\">Isuzu</division><division id=\"20\">Jaguar</division><division id=\"21\">Jeep</division><division id=\"22\">Kia</division><division id=\"47\">Lamborghini</division><division id=\"23\">Land Rover</division><division id=\"24\">Lexus</division><division id=\"25\">Lincoln</division><division id=\"48\">Lotus</division><division id=\"53\">Maserati</division><division id=\"26\">Mazda</division><division id=\"27\">Mercedes-Benz</division><division id=\"2\">MINI</division><division id=\"29\">Mitsubishi</division><division id=\"30\">Nissan</division><division id=\"34\">Porsche</division><division id=\"57\">Ram</division><division id=\"49\">Rolls-Royce</division><division id=\"52\">Scion</division><division id=\"42\">Smart</division><division id=\"37\">Subaru</division><division id=\"38\">Suzuki</division><division id=\"56\">Tesla</division><division id=\"39\">Toyota</division><division id=\"40\">Volkswagen</division><division id=\"41\">Volvo</division></Divisions></S:Body></S:Envelope>" 

и я попытался

@doc = Nokogiri::XML(xml) 

он дал что-то вроде

#<Nokogiri::XML::Document:0x5ea65f0 name="document" children=[#<Nokogiri::XML::Element:0x5ea6398 name="Envelope" namespace=#<Nokogiri::XML::Namespace:0x5ea6370 prefix="S" href="http://schemas.xmlsoap.org/soap/envelope/"> children=[#<Nokogiri::XML::Element:0x5ea5fc4 name="Body" namespace=#<Nokogiri::XML::Namespace:0x5ea6370 prefix="S" href="http://schemas.xmlsoap.org/soap/envelope/"> children=[#<Nokogiri::XML::Element:0x5ea5c5e name="Divisions" namespace=#<Nokogiri::XML::Namespace:0x5ea5c18 href="urn:description7a.services.chrome.com"> children=[#<Nokogiri::XML::Element:0x5ea592a name="responseStatus" namespace=#<Nokogiri::XML::Namespace:0x5ea5c18 href="urn:description7a.services.chrome.com"> attributes=[#<Nokogiri::XML::Attr:0x5ea5858 name="responseCode" value="Successful">, #<Nokogiri::XML::Attr:0x5ea581c name="description" value="Successful">]>, #<Nokogiri::XML::Element:0x5ea518c name="division" namespace=#<Nokogiri::XML::Namespace:0x5ea5c18 href="urn:description7a.services.chrome.com"> attributes=[#<Nokogiri::XML::Attr:0x5ea515a name="id" value="1">] children=[#<Nokogiri::XML::Text:0x5ea4ad4 "Acura">]>, #<Nokogiri::XML::Element:0x5ea491c name="division" namespace=#<Nokogiri::XML::Namespace:0x5ea5c18 href="urn:description7a.services.chrome.com"> attributes=[#<Nokogiri::XML::Attr:0x5ea489a name="id" value="44">] children=[#<Nokogiri::XML::Text:0x63dc434 "Aston Martin">]>, #<Nokogiri::XML::Element:0x63dc222 name="division" namespace=#<Nokogiri::XML::Namespace:0x5ea5c18 href="urn:description7a.services.chrome.com"> attributes=[#<Nokogiri::XML::Attr:0x63dc1f0 name="id" value="4">] children=[#<Nokogiri::XML::Text:0x63dbcbe "Audi">]>, #<Nokogiri::XML::Element:0x63dbb56 name="division" namespace=#<Nokogiri::XML::Namespace:0x5ea5c18 href="urn:description7a.services.chrome.com"> attributes=[#<Nokogiri::XML::Attr:0x63dbb10 name="id" value="45">] ...... 

Я попробовал @ doc.xpath ('// S: Envelope // S :: Body'). Each do | f | ставит е конец

я выберусь поставить как

<S:Body> 
    <Divisions xmlns="urn:description7a.services.chrome.com"> 
    <responseStatus responseCode="Successful" description="Successful"/> 
    <division id="1">Acura</division> 
    <division id="44">Aston Martin</division> 
    <division id="4">Audi</division> 
    <division id="45">Bentley</division> 
    <division id="5">BMW</division> 
    ....... 
    </Divisions> 
</S:Body> 

я хочу, чтобы получить информацию, как идентификатор и имя так я попытался

он вернулся [], пустой массив

@doc.xpath('//S:Envelope//S::Body//Divisions') 

он вернулся пустой массив, такой как []

+0

Возможный дубликат: http://stackoverflow.com/questions/9482047/read-response-with-nokogiri-from-a-soap-call-with-savon – vee

ответ

0

Я верю, что вы должны взглянуть на Нокогири и XPAth. XPath - очень мощный инструмент, когда вы работаете с XML. Here вы можете найти пример использования Nokogiri + XPath. Вы должны прочитать documentation about xpath (заимствованный из предыдущей ссылки :)). Конечно, вы можете найти массу других примеров в google.

PS IMHO XPath является мощным, но с интересной логикой (концепцией), и я сомневаюсь, что вы получите хороший результат от первой попытки, но стоит потратить время и изучить его.

0

Say Ниже ваш XML

<somexml> 
    <name>Foo</name> 
    <id>1</id> 
</somexml> 

вы можете загрузить это в IRB как

require 'rubygems' 
require 'nokogiri' 
@doc = Nokogiri::XML(File.open("test.xml")) 
@doc.xpath("//somexml//id").children.first.to_s 

Это должно дать вам идентификатор, который вы ищете, посмотрите документацию ссылок, приведенных выше для дополнительных помощников

+0

Я отредактировал мой вопрос, не удалось для размещения моего журнала здесь, поскольку он слишком длинный, я столкнулся с проблемой с @ doc.xpath ("// somexml // id"). child.first.to_s пустой массив возвращен –

 Смежные вопросы

  • Нет связанных вопросов^_^