我在下面列出了两个简单的模板,对下面列出的一些示例数据进行了操作:
<?xml version="1.0" encoding="utf-8?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="utf-8"/>
<xsl:template match="Gallery/Tab/ImageGroup/Image">
<xsl:apply-templates select="imageText" />
</xsl:template>
<xsl:template match="imageText">
<h2><xsl:value-of select="." /></h2>
</xsl:template>
</xsl:stylesheet>
<?xml version="1.0" encoding="utf-8"?>
<Gallery name="My Gallery">
<Tab tabID="imageDivTab0" height="500" name="Team Wear">
<ImageGroup>
<Image>
<imageName>Challenge-Badge.jpg</imageName>
<imageURL>images/gallery/small/Tab1/</imageURL>
<imageText>Challenge Badge</imageText>
</Image>
</ImageGroup>
</Tab>
</Gallery>
当处理器运行时,我得到预期的结果(显示imageText)如果我注释掉第一个模板,我会显示所有内容(imageName,imageURL和图像文本)。
这是因为第二个模板试图匹配&#39; imageText&#39;没有适当的上下文,即它正在使用根节点,所以它显示了所有内容。
我对此很新,所以任何帮助都会非常感激。
干杯
答案 0 :(得分:1)
有几个内置模板规则。
参考:http://www.w3.org/TR/xslt#built-in-rule
在您的情况下,应用的模板是:
<xsl:template match="*|/">
<xsl:apply-templates/>
</xsl:template>
和
<xsl:template match="text()|@*">
<xsl:value-of select="."/>
</xsl:template>