XSLT:检查XML元素是否在xpath中具有父元素

时间:2013-09-20 22:57:51

标签: xml xslt xpath

我在SO上浏览过很多例子,但我找不到我想要的东西。有许多示例匹配具有特定父级的元素。但是,我不想匹配特定的父母,我只想知道它是否有父母。

所以对于这里的xml:

<foo>
    <bar/>
</foo>
<bar/>

使用以下XSLT:

<xsl:template match="bar">
    <xsl:choose>
        <xsl:when test="[test here]">
            ..do something..
        </xsl:when>
    </xsl:choose>
</xsl:template>

如何简单地测试<bar>元素是否具有父元素或者没有元素?

谢谢!

2 个答案:

答案 0 :(得分:2)

只需在父轴上使用通配符名称测试:test="parent::*"

答案 1 :(得分:2)

此输入:

<foo>
  <bar>
    <baz/>
  </bar>
</foo>

到这个脚本:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:output method="text"/>

  <xsl:template match="*">

    <xsl:choose>
      <xsl:when test="parent::*">Parent: </xsl:when>
      <xsl:otherwise>No Parent: </xsl:otherwise>
    </xsl:choose>
    <xsl:value-of select="name()"/>
    <xsl:text>&#xa;</xsl:text>

    <xsl:apply-templates select="*"/>

  </xsl:template>

</xsl:stylesheet>

产生此输出:

No Parent: foo
Parent: bar
Parent: baz

注意:您的示例输入文件格式不正确,不能作为XSLT转换的输入,因为它有两个根。