如何忽略XPath的命名空间

我的目标是使用XPath从具有多个名称空间的多个xml文件中提取某些节点。 一切工作正常,只要我知道命名空间的URI。 名称空间名称本身保持不变,但Schemas(XSD)有时是客户端生成的,即我所不知道的。 那么我基本上有三个select:

  1. 只使用一个模式的命名空间,希望没有出错(我可以肯定?)

  2. 得到文档的子节点,并寻找具有名称空间URI的第一个节点,希望在那里使用URI,希望它是正确的。 出于多种原因可能会出错

  3. 莫名其妙地告诉xpath:“看,我不在意名称空间,只是find所有与这个名字的节点,我甚至可以告诉你名字空间的名称,而不是URI”。 这是这里的问题

这不是重复许多“我的XPathexpression式不工作,因为我不知道名称空间意识”问题,如在这里或这里find。 我知道如何使用名称空间感知。 只是没有如何摆脱它。

您可以使用local-name() XPath函数。 而不是像select一个节点

 /path/to/x:somenode 

您可以select所有节点并筛选具有正确本地名称的节点:

 /path/to/*[local-name() = 'somenode'] 

您可以在XPath2.0中执行相同的语法:

 /path/to/*:somenode