gpt4 book ai didi

ruby - 为什么我不能从根元素中带有命名空间的 XPath 获得结果?

转载 作者:行者123 更新时间:2023-12-04 17:04:25 27 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Nokogiri/Xpath namespace query

(3 个回答)


7年前关闭。




这可能是一个 XML 命名空间新手问题,但我无法弄清楚如何让 XPath 与以下具有此特定根元素的截断 XML 一起使用:

<?xml version="1.0" encoding="UTF-8"?>
<CreateOrUpdateEventsRequest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://dhamma.org" version="3-0-0">
<LanguageKey>
<IsoCode>en</IsoCode>
</LanguageKey>
<Publish>
<Value>true</Value>
</Publish>
<Events>
<Event>
<EventKey>
<LocationKey>
<SubDomain>rasmi</SubDomain>
</LocationKey>
<EventId>10DayPDFStdTag</EventId>
</EventKey>
</Event>
</Events>
</LanguageKey>
</CreateOrUpdateEventsRequest>

使用 Ruby 和 Nokogiri(使用刚刚更新的 libxml2),只有当我删除根元素中的所有额外信息时,它才能与 XPath 一起正常工作,使其:
<CreateOrUpdateEventsRequest>

否则什么都不起作用:
$> @doc.xpath("//CreateOrUpdateEventsRequest") #=> [] with original header, an array of nodes with modified header
$> @doc.xpath("//LanguageKey") #=> [] with the original header, an array of nodes with modified header

$> @doc.xpath("//xmlns:LanguageKey") #=> undefined namespace prefix with the original

如何使用 XPath 处理这样的命名空间?

最佳答案

非常感谢您的帮助。

答案似乎是当 XML 应该使用前缀声明命名空间时重新声明 XMLNS,如 xmlns:myns .

来自 www.w3.org:

The XML specification reserves all names beginning with the letters 'x', 'm', 'l' in any combination of upper- and lower-case for use by the W3C. To date three such names have been given definitions—although these names are not in the XML namespace, they are listed here as a convenience to readers and users:


  • xml:见 http://www.w3.org/TR/xml/#NT-XMLDeclhttp://www.w3.org/TR/xml-names/#xmlReserved
  • xmlns:见 http://www.w3.org/TR/xml-names/#ns-decl
  • xml-stylesheet:参见xml-stylesheet处理说明
  • 关于ruby - 为什么我不能从根元素中带有命名空间的 XPath 获得结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17712158/

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