gpt4 book ai didi

ruby - Nokogiri/Xpath 命名空间查询

转载 作者:数据小太阳 更新时间:2023-10-29 01:37:37 24 4
gpt4 key购买 nike

我正在尝试使用 xpath 提取 dc:title 元素。我可以使用以下代码提取元数据。

doc = <<END
<?xml version="1.0" encoding="UTF-8"?>
<package xmlns="http://www.idpf.org/2007/opf" version="2.0">
<metadata xmlns:dc="URI">
<dc:title>title text</dc:title>
</metadata>
</package>
END

doc = Nokogiri::XML(doc)

# Awesome this works!
puts '//xmlns:metadata'
puts doc.xpath('//xmlns:metadata')
# => <metadata xmlns:dc="URI"><dc:title>title text</dc:title></metadata>

如您所见,上面的代码似乎工作正常。但是我似乎无法从该节点树中获取标题信息,以下所有操作均失败。

puts doc.xpath('//xmlns:metadata/title')
# => nil

puts doc.xpath('//xmlns:metadata/dc:title')
# => ERROR: `evaluate': Undefined namespace prefix

puts doc.xpath('//xmlns:dc:title')
# => ERROR: 'evaluate': Invalid expression: //xmlns:dc:title

有人可以用上面的 xml 文档解释如何在 xpath 中使用命名空间。

最佳答案

解析时需要注册所有命名空间。 Nokogiri 自动在根节点上注册命名空间。您必须自己注册不在根节点上的任何命名空间。这应该有效:

puts doc.xpath('//dc:title', 'dc' => "URI")

或者,您可以完全删除命名空间。仅当您确定不会有冲突的节点名称时才执行此操作。

doc.remove_namespaces!
puts doc.xpath('//title')

关于ruby - Nokogiri/Xpath 命名空间查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4690737/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com