我想知道如何从xml以下获取价值。我尝试了几种不同的方法,似乎找不到正确的解决方案。
<a>
<aid>ok</aid>
<b>
<bid>ok</bid>
<c>
<cid>ok</cid>
<d>
<dValue>goal</dValue>
</d>
</c>
</b>
</a>
条件必须符合以下标准:
<a><aid>
值正常<a><b><bid>
值正常<a><b><c><cid>
值正常<a><b><c><d><dValue>
任何帮助都会非常感激,因为我已经在这上花了几个小时:)哦,我正在使用xslt 2.0。
答案 0 :(得分:3)
<xsl:value-of select="a[aid='ok']/b[bid='ok']/c[cid='ok']/d/dValue"/>
答案 1 :(得分:1)
更一般的任务:
如果元素的名称无关紧要,并且路径的深度(嵌套元素的数量)可以是任意的,但子项的名称是附加“id”的父名称,则此XPath 2.0表达式在所有这些情况下产生想要的结果,包括当前的情况:
//dValue[every $anc in ../ancestor::*
satisfies $anc/*[name() eq concat($anc/name(), 'id')]/string() eq 'ok' ]/string()
XSLT 2.0验证:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:sequence select=
"//dValue[every $anc in ../ancestor::*
satisfies $anc/*[name() eq concat($anc/name(), 'id')]/string() eq 'ok' ]/string()"/>
</xsl:template>
</xsl:stylesheet>
在提供的XML文档上应用此转换时:
<a>
<aid>ok</aid>
<b>
<bid>ok</bid>
<c>
<cid>ok</cid>
<d>
<dValue>goal</dValue>
</d>
</c>
</b>
</a>
评估表达式并输出此评估的结果:
goal
在此XML文档上应用相同的转换:
<x>
<xid>ok</xid>
<y>
<yid>ok</yid>
<z>
<zid>ok</zid>
<t>
<dValue>goal2</dValue>
</t>
</z>
</y>
</x>
再次产生想要的正确结果:
goal2