0

当一个命名空间有不同的架构时,当我想从 xml 文件中选择带有 xpath 的项目时,我遇到了问题。

给出的是这个有效的 xml 文件:

<getDataAction xmlns="http://example.org/ns1">
   <getData xmlns:f4k1="http://example.org/ns2" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
      <f4k1:place xmlns:f5k1="http://example.org/ns3">
         <f4k1:city i:type="f5k1:Country" xmlns:f5k1="http://example.org/ns4">
           <f5k1:notice>Notice</f5k1:notice>
         </f4k1:city>
         <f4k1:testvillage i:nil="true">
           <f4k1:data xmlns:f5k1="http://example.org/ns5">
             <f5k1:address xmlns:d7k1="http://example.org/ns6">
               <f5k1:important>no</f5k1:important>
             </f5k1:address>
           </f4k1:data>
         </f4k1:testvillage>
      </f4k1:place>
  </getData>
</getDataAction>

我要选择

<f5k1:notice>Notice</f5k1:notice>

所以我用这个xpath-query //f5k1:notice,但它不起作用。如果我将 ns5 命名空间(第 8 行)更改为 ns4(如第 4 行),它将起作用。

你能告诉我为什么这会起作用以及我必须做些什么才能在不更改 XML 的情况下让它工作吗?

4

1 回答 1

1

XPath 表达式//f5k1:notice计算为一组元素,其本地名称为notice,其名称空间名称为环境绑定到的任何名称空间f5k1。由于您没有指定要使用什么环境来评估此 XPath 表达式,因此无法准确说明出了什么问题,但最简单的解释是,在您的环境中,f5k1未绑定到http://example.org/ns4.

最好的解决方法:了解如何将前缀绑定到您正在使用的系统中的命名空间。

最简单的解决方法: //*[local-name="notice" and namespace-name="http://example.org/ns4"].

于 2012-12-13T02:04:41.257 回答