自闭xsl:模板标签?

时间:2017-08-24 18:44:38

标签: xml xslt

我正在查看旧的xsl文件并尝试了解原作者为什么将多个<xsl:template>元素定义为包含{{1的自闭标记的原因属性。在下面的示例中,我的问题将与match

有关

XML

<xsl:template match="title" />

XSL

<?xml version="1.0" encoding="UTF-8"?>
<catalog>
  <cd>
    <title>Empire Burlesque</title>
    <artist>Bob Dylan</artist>
    <country>USA</country>
    <company>Columbia</company>
    <price>10.90</price>
    <year>1985</year>
  </cd>
</catalog>

由于标签是自动关闭的,因此<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <body> <h2>My CD Collection</h2> <xsl:apply-templates/> </body> </html> </xsl:template> <xsl:template match="cd"> <p> <xsl:apply-templates select="title"/> <xsl:apply-templates select="artist"/> </p> </xsl:template> <xsl:template match="title" /> <xsl:template match="artist"> Artist: <span style="color:#00ff00"> <xsl:value-of select="."/></span> <br /> </xsl:template> </xsl:stylesheet> 中显然没有内容。这样做的重点是什么?这是一种隐藏&#34;技术的技术。通过匹配属性与<xsl:template \>关联的XML数据?

2 个答案:

答案 0 :(得分:2)

自闭<xsl:template match="title" />标记用于抑制匹配的节点。这通常与身份转换一起使用,以便将其他所有内容复制到输出被抑制的节点。

例如,

title对输入文档中匹配的-it元素不执行任何操作。

答案 1 :(得分:0)

在明确使用<xsl:apply-templates select="title"/>然后也使用<xsl:template match="title" />来确保title元素不产生输出的样式表中没有多大意义,但是例如<xsl:apply-templates select="*"/>父模板中的<xsl:apply-templates/>或简称cd您可以使用空<xsl:template match="title" />来确保title元素不会产生任何输出。

在给定的样式表中,简单地删除<xsl:apply-templates select="title"/>

当然会更容易

经常使用的地方是身份转换模板

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

然后添加一些模板来转换某些元素,你可以添加空模板(例如<xsl:template match="title" />)来删除其他元素(例如title元素),因为它们不会生成任何元素输出