XSL转换仅选择没有子节点的根标记下的元素

时间:2011-10-10 09:03:27

标签: xslt xpath

我有一个XML文件,如下所示 我想只选择rootelements和没有匹配模板的子元素。 有人可以帮我写一个只从中选择根元素的匹配模板吗? 谢谢你的帮助。

<root>
<child1>
<element1>Valule</element1>
<element2>Value</element2>
</child1>
<child2>
<element1>Value</element1>
<element2>Value</element2>
</child2>
<rootelement1>rootval1</rootelement1>
<rootelement2>rootval2</rootelement2>
</root>

1 个答案:

答案 0 :(得分:2)

要仅选择根标签下没有子元素的元素,您可以执行以下操作

<xsl:apply-templates select="/root/*[not(*)]" />

或者,如果您当前位于 root 元素上,则会将其简化为以下内容:

<xsl:apply-templates select="*[not(*)]" />

因此,例如,使用以下XSLT

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output method="xml" indent="yes"/>

   <xsl:template match="/root">
      <xsl:apply-templates select="*[not(*)]" />
   </xsl:template>

   <xsl:template match="@*|node()">
      <xsl:copy>
         <xsl:apply-templates select="@*|node()"/>
      </xsl:copy>
   </xsl:template>
</xsl:stylesheet>

当应用于您的示例XML时,将返回以下内容

<rootelement1>rootval1</rootelement1>
<rootelement2>rootval2</rootelement2>