gpt4 book ai didi

ruby - 如何在 Nokogiri 中使用带有 XPath 的 xmlns 声明

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

我正在使用 Nokogiri::XML 来解析来自 Amazon SimpleDB 的响应。响应类似于:

<SelectResponse xmlns="http://sdb.amazonaws.com/doc/2007-11-07/">
<SelectResult>
<Item>
<Attribute><Name>Foo</Name><Value>42</Value></Attribute>
<Attribute><Name>Bar</Name><Value>XYZ</Value></Attribute>
</Item>
</SelectResult>
</SelectResponse>

如果我直接将响应交给 Nokogiri,所有 XPath 查询(例如 doc/"//Item/Attribute[Name='Foo']/Value")都会返回一个空数组。但是,如果我从 SelectResponse 标记中删除 xmlns 属性,它就可以正常工作。

我需要做一些额外的事情来解释命名空间声明吗?这种解决方法感觉非常像黑客攻击。

最佳答案

该 XPath 查询查找不在任何命名空间中的元素。您需要告诉您的 XPath 处理器您正在寻找 http://sdb.amazonaws.com/doc/2007-11-07/ 命名空间中的元素。

使用 Nokogiri 做到这一点的一种方法是:

doc = Nokogiri::XML.parse(...)
doc.xpath("//aws:Item/aws:Attribute[Name='Foo']/aws:Value", {"aws" => "http://sdb.amazonaws.com/doc/2007-11-07/"})

关于ruby - 如何在 Nokogiri 中使用带有 XPath 的 xmlns 声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1737572/

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