如何通过XPath选择祖先的孩子?

时间:2013-10-09 10:52:48

标签: xml xslt xpath xml-parsing

我的XML结构类似于:

<a>
   <b>
      <c id="2.3">
      </c>
   </b>
   <d>
      <e>
         <f>
         </f>
      </e>
   </d>
</a>

我在"f"的模板中,我希望在when id的{​​{1}}的第一个数字上加上c,例如:

<xsl:template match="f">
   <xsl:choose>
      <xsl:when test="substring-before(../../../c/@id, '.') = '2'">
         <xsl:text>Successful</xsl:text>
      </xsl:when>
   </xsl:choose>
</xsl:template>

以上代码不起作用!

任何人都可以建议我使用它吗?

Thnx提前!!

2 个答案:

答案 0 :(得分:4)

因为祖先和c之间存在b

这应该有效:

substring-before(../../../b/c/@id, '.') = '2'

(假设第二个<b>应该是</b>

答案 1 :(得分:4)

相对路径很好,但有时候更明确是有用的。

<xsl:template match="f">
   <xsl:choose>
      <xsl:when test="substring-before(ancestor::a[1]/b/c/@id, '.') = '2'">
         <xsl:text>Successful</xsl:text>
      </xsl:when>
   </xsl:choose>
</xsl:template>