如何指示XSLT仅对儿童应用模板?

时间:2013-05-13 08:34:41

标签: xslt

当应用这个XSLT时:

<xsl:template match="e">
  <xsl:value-of select="@name"/>
</xsl:template>

到这个xml:

   <root>
     <e name="1"/>
     <la>
      <e name="bla"/>
     </la> 
   </root>

我得到“1”和“bla”。

  1. 为什么会这样?
  2. 如何确保XSLT仅应用于root的直接子级?

2 个答案:

答案 0 :(得分:1)

你试过match="root/e"吗?如果要匹配特定上下文中的节点,则需要在规则中提供上下文,否则具有匹配节点名称的所有节点都将应用于规则。

答案 1 :(得分:0)

您也可以使用以下内容:

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

  <xsl:template match="root">
    <xsl:apply-templates select="child::e"/>
  </xsl:template>

  <xsl:template match="e">
    <xsl:value-of select="@name"/>
  </xsl:template>

</xsl:stylesheet>