我不确定如何解释这个,所以如果有更好的方法请告诉我。
我有一个值,我需要搜索XML For,但我想在获得结果集之前搜索另一个值。
让我告诉你:
<n:TaskGetResponse>
<MemHead>
<memidnum>1262753194</memidnum>
<memrecno>22672100</memrecno>
</MemHead>
<MemHead>
<memidnum>1262753194</memidnum>
<memrecno>22672104</memrecno>
</MemHead>
<EntXtsk>
<caudrecno>6348855</caudrecno>
<memrecno>22672100</memrecno>
</EntXtsk>
<EntXtsk>
<caudrecno>6348855</caudrecno>
<memrecno>22672101</memrecno>
</EntXtsk>
<EntXtsk>
<caudrecno>6348878</caudrecno>
<memrecno>22672102</memrecno>
</EntXtsk>
<MemXtsk>
<caudrecno>6348878</caudrecno>
<memrecno>22672103</memrecno>
</MemXtsk>
</n:TaskGetResponse>
我有1262753194的memidnum。我想找到所有EntXtsk和MemXtsk,它们的memrecno匹配所有MemHead,其memidnum为1262753194。
在这个例子中,我有2个MemHeads,它们具有相同的memidnum,但是memrecno不同(有2个memrecno要查看)。我想找到所有* Xtsk,它们的memrecno与2匹配。
XPath可以实现吗?
使用
TaskGetResponse/*[name(.) = 'MemXtsk' or name(.) = 'EntXtsk']
我可以获得所有* Xtsk节点。
但不确定如何获得仅与我需要的memidnum-&gt; memrecno相关联的那些。
任何帮助都会摇滚。
更新 我可以跑
TaskGetResponse/*[memrecno= //TaskGetResponse/*[memidnum="1262753194"]/memrecno]
这让我得到了memrecno组合的一切。但我不知道该怎么说才能让我得到EntXtsk和MemXtsk。
答案 0 :(得分:1)
使用强>:
/*/*[self::EntXtsk or self::MemXtsk]
[memrecno
=
/*/MemHead[memidnum = 1262753194]/memrecno
]
这将选择名为EntXtsk
或MemXtsk
的任何元素,它是XML文档顶部元素的子元素,并且具有memrecno
子元素,其字符串值等于某个memrecno
元素的字符串值,它是MemHead
元素的子元素,它是XML文档中top元素的子元素,并且还有一个memidnum
子元素,其字符串值为"1262753194"
基于XSLT的验证(强烈建议您使用 the XPath Visualizer 进行任何XPath探索):
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:copy-of select=
"/*/*[self::EntXtsk or self::MemXtsk]
[memrecno
=
/*/MemHead[memidnum = 1262753194]/memrecno
]
"/>
</xsl:template>
</xsl:stylesheet>
应用于此XML文档(提供的文档在末尾添加了一个MemXtsk
元素):
<n:TaskGetResponse xmlns:n="n">
<MemHead>
<memidnum>1262753194</memidnum>
<memrecno>22672100</memrecno>
</MemHead>
<MemHead>
<memidnum>1262753194</memidnum>
<memrecno>22672104</memrecno>
</MemHead>
<EntXtsk>
<caudrecno>6348855</caudrecno>
<memrecno>22672100</memrecno>
</EntXtsk>
<EntXtsk>
<caudrecno>6348855</caudrecno>
<memrecno>22672101</memrecno>
</EntXtsk>
<EntXtsk>
<caudrecno>6348878</caudrecno>
<memrecno>22672102</memrecno>
</EntXtsk>
<MemXtsk>
<caudrecno>6348878</caudrecno>
<memrecno>22672103</memrecno>
</MemXtsk>
<MemXtsk>
<caudrecno>6348879</caudrecno>
<memrecno>22672104</memrecno>
</MemXtsk>
</n:TaskGetResponse>
评估XPath表达式并将所选节点复制到输出:
<EntXtsk xmlns:n="n">
<caudrecno>6348855</caudrecno>
<memrecno>22672100</memrecno>
</EntXtsk>
<MemXtsk xmlns:n="n">
<caudrecno>6348879</caudrecno>
<memrecno>22672104</memrecno>
</MemXtsk>