我有以下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有一个命名空间,显然没有用,所以,我该如何处理呢?
谢谢,
答案 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