我试图通过为条件赋予唯一值U003_O100_001T_609644,从几个ViewItem中找到带有谓词的XPath表达式,其值为1900310。请参阅下面的代码,
< B:ViewItem>
< B:字段>
c为C:KeyValueOfstringanyType>
c为C:钥匙及GT; ID< / C:钥匙及GT;
< c:Value> 1900310< / c:Value>
< / C:KeyValueOfstringanyType>
c为C:KeyValueOfstringanyType>
c为C:钥匙及GT;子类型LT; / C:钥匙及GT;
c为C:值> U003_O100_00IT_609644< / C:值>
< / C:KeyValueOfstringanyType>
c为C:KeyValueOfstringanyType>
c为C:钥匙及GT; SectionType< / C:钥匙及GT;
c为C:值>发行< / C:值>
< / C:KeyValueOfstringanyType>
< / B:的Fileds>
< / B:ViewItem>
我尝试按如下方式编写表达式,
Query = / Envelope / Body / GetViewByIdResponse / GetViewByIdResult / Items / ViewItem / Fields / KeyValueOfstringanyType [Value ='U003_O100_001T_609644'] / Value [Key ='ID']
但它没有给我价值。你能帮忙吗?
感谢
答案 0 :(得分:2)
选择所需元素的一个XPath表达式是:
/b:ViewItem
/b:Fields
/c:KeyValueOfstringanyType
[c:Key = 'ID']
/c:Value
请注意所提供的XML文档具有名称空间,并且任何包含未加前缀的元素名称的XPath表达式都不会选择所需的元素,但以下格式的表达式除外:
/*[local-name() = 'ViewItem']
/*[local-name() = 'Fields']
/*[local-name() = 'KeyValueOfstringanyType']
[*[local-name() = 'Key'] = 'ID']
/*[local-name() = 'Value']
此外,对于上面的第一个XPath表达式,前缀为"b:"
和"c:"
的名称空间
必须“注册”(阅读XPath引擎的文档如何做到这一点)。
基于XSLT的验证:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:b="some:b" xmlns:c="some:c">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:copy-of select=
"/b:ViewItem
/b:Fields
/c:KeyValueOfstringanyType
[c:Key = 'ID']
/c:Value
"/>
==============
<xsl:copy-of select=
"/*[local-name() = 'ViewItem']
/*[local-name() = 'Fields']
/*[local-name() = 'KeyValueOfstringanyType']
[*[local-name() = 'Key'] = 'ID']
/*[local-name() = 'Value']
"/>
</xsl:template>
</xsl:stylesheet>
将此XSLT转换应用于以下XML文档(提供的一个,针对严重的错误形式进行了更正):
<b:ViewItem xmlns:b="some:b" xmlns:c="some:c">
<b:Fields>
<c:KeyValueOfstringanyType>
<c:Key>ID</c:Key>
<c:Value>1900310 </c:Value>
</c:KeyValueOfstringanyType>
<c:KeyValueOfstringanyType>
<c:Key>SubType</c:Key>
<c:Value>U003_O100_00IT_609644</c:Value>
</c:KeyValueOfstringanyType>
<c:KeyValueOfstringanyType>
<c:Key>SectionType</c:Key>
<c:Value>Released</c:Value>
</c:KeyValueOfstringanyType>
</b:Fields>
</b:ViewItem>
评估两个XPath表达式,并输出他们选择的节点:
<c:Value xmlns:c="some:c" xmlns:b="some:b">1900310 </c:Value>
==============
<c:Value xmlns:c="some:c" xmlns:b="some:b">1900310 </c:Value>