应用此 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”。
- 为什么会这样?
- 如何确保 XSLT 仅应用于 root 的直接子级?
应用此 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”。
你试过了match="root/e"
吗?如果要匹配某个上下文中的节点,则需要在规则中提供上下文,否则所有具有匹配节点名称的节点都适用于该规则。
你也可以使用类似的东西:
<?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>