【发布时间】:2017-02-10 04:36:15
【问题描述】:
我想找一个这样的元素。
xml1 = '<period>2017-02-10</period>'
或
xml2 = <<XML
<root xmlns:xbrli="http://www.w3.org/1999/xhtml">
<xbrli:period>2017-02-10</period>
</root>
XML
我可以通过以下方式选择元素:
def period_from_xml(xml)
doc = Nokogiri::XML(xml)
period_element = if doc.namespaces.keys.include?('xmlns:xbrli')
doc.at_css("xbrli|period")
else
doc.at_css("period")
end
end
period_from_xml(xml1)
# => <period>2017-02-10</period>
period_from_xml(xml2)
# => <xbrli:period>2017-02-10</period>
我知道Nokogiri::XML::Document#remove_namespaces!,但我不想使用它,因为另一个地方我需要它。
也许复制doc 和doc_without_namespaces 是个好主意?
有没有简单易行的方法来处理这种情况?
【问题讨论】:
-
请阅读“minimal reproducible example”。您的输入 XML 示例需要更好,因为它缺少您要查找的命名空间声明。
标签: ruby namespaces nokogiri