【发布时间】:2015-12-10 17:04:32
【问题描述】:
我有多个 XML(如下所示),其中出现了可选标记。这个标签在一个命名空间mynamespace
xml = %{<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0" xmlns:mynamespace="http://example.com/ns/1.0">
<channel>
<item>
<title>bar</title>
<mynamespace:custom_tag>some text</mynamespace:custom_tag>
</item>
<item>
<title>foo</title>
</item>
</channel>
</rss>}
Nokogiri::XML::Reader(xml).each do |node|
next if node.name!='item' || node.node_type != Nokogiri::XML::Reader::TYPE_ELEMENT
node = Nokogiri::XML.parse(node.outer_xml)
puts "-> node"
puts node.namespaces
puts node.xpath("//mynamespace:custom_tag").text
end
当Nokogiri::XML::Reader(xml) 迭代每个<item> 时,第一次运行输出some text。但是,当解析第二个项目时,它不包含我的 mynamespace 命名空间的元素,它会引发错误。
输出是:
-> node
{"xmlns:mynamespace"=>"http://example.com/ns/1.0"}
some text
-> node
{}
Nokogiri::XML::XPath::SyntaxError: Undefined namespace prefix: //mynamespace:custom_tag
- 为什么 Nokogiri 将命名空间包含在第一项中而不包含在第二项中?只是因为第一个使用命名空间,而第二个没有?
- 即使当前节点中不存在此命名空间,搜索带有命名空间的标签的解决方法是什么?
【问题讨论】:
标签: ruby xml nokogiri xml-namespaces