使用Xpath澄清XSLT处理

时间:2011-11-14 10:03:05

标签: xml xslt xpath

我在下面列出了两个简单的模板,对下面列出的一些示例数据进行了操作:

<?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;没有适当的上下文,即它正在使用根节点,所以它显示了所有内容。

我对此很新,所以任何帮助都会非常感激。

干杯

1 个答案:

答案 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>