带名称空间的XPath和XML

时间:2011-02-11 20:11:18

标签: xml xpath xml-namespaces

我有以下XML:

<?xml version="1.0" encoding="utf-8"?>
<ArrayOfAgence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xmlns:xsd="http://www.w3.org/2001/XMLSchema"
               xmlns="http://www.artos.co.il/">
  <Agence>
    <CodeAval>20008</CodeAval>
    <CodeSource>ArtPO</CodeSource>
    <LogicielSource>NTLIS</LogicielSource>
</Agence>
</ArrayOfAgence>

我想获取CodeAval值,所以我尝试了:

ArrayOfAgence/Agence/CodeAval

由于这个XML有一个命名空间,显然没有用,所以,我该如何处理呢?

谢谢,

2 个答案:

答案 0 :(得分:5)

您在评论中提到您在XSLT中使用此XPath。在这种情况下,您需要添加一个名称空间定义,其前缀为输入文档默认名称空间http://www.artos.co.il/,然后在XPath表达式中使用此前缀。

命名空间定义的示例(它不需要在stylesheet元素中)

<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:artos="http://www.artos.co.il/">

XPath表达式中的前缀用法示例

<xsl:value-of select="artos:ArrayOfAgence/artos:Agence/artos:CodeAval"/>

请注意每个元素名称前面添加的前缀。

答案 1 :(得分:4)

如果你的XPath库是名称空间感知的(你的看起来似乎是这样),那么它应该为你提供一种别名命名空间的方法。

例如,如果您使用的是Java,则javax.xml.xpath.XPath对象具有setNamespaceContext(NamespaceContext context)方法,可让您提供命名空间解析程序。

因此,您可能会告诉它a是命名空间http://www.artos.co.il/的别名,然后您的查询将成为a:ArrayOfAgence/a:Agence/a:CodeAval