Nokogiri css не найти элемент - PullRequest
0 голосов
/ 14 декабря 2018

У меня проблема в Нокогири.Вот мой XML:

<nfeProc>
  <NFe xmlns="http://www.portalfiscal.inf.br/nfe">
    <infNFe Id="NFe123" versao="3.10">
      <ide>
        <name>25</name>
      </ide>
    </infNFe>
  </NFe>
</nfeProc>

Я хочу найти тег ide, но можно найти только тег nfeProc.

require 'nokogiri'

doc = Nokogiri::XML(File.open("sample.xml"))
doc.css('ide')
=> []

Но когда я добавляю атрибут кТег nfeProc, работает хорошо.

<nfeProc xmlns="http://www.portalfiscal.inf.br/nfe">
  <NFe xmlns="http://www.portalfiscal.inf.br/nfe">
    <infNFe Id="NFe123" versao="3.10">
      <ide>
        <name>25</name>
      </ide>
    </infNFe>
  </NFe>
</nfeProc>

require 'nokogiri'

doc = Nokogiri::XML(File.open("sample.xml"))
doc.css('ide')
=> #<Nokogiri::XML::Document:0x19226c4 name="document" children=[#<Nokogiri::XML::Ele...

Что мне делать, чтобы он работал без атрибута xmlns?

1 Ответ

0 голосов
/ 14 декабря 2018

Если вас не волнует пространство имен, Nokogiri::XML::Document предоставляет метод для этого, называемый remove_namespaces!.

doc = <<XML
<nfeProc>
  <NFe xmlns="http://www.portalfiscal.inf.br/nfe">
    <infNFe Id="NFe123" versao="3.10">
      <ide>
        <name>25</name>
      </ide>
    </infNFe>
  </NFe>
</nfeProc>
XML

doc = Nokogiri::XML(doc)
doc.remove_namespaces!
doc.css('ide name').text
#=> "25"
...