Nokogiri CSS找不到元素

时间:2018-12-14 12:58:27

标签: ruby-on-rails nokogiri

我在Nokogiri有问题。这是我的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 :(得分:0)

如果您不关心命名空间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"