我正在查看旧的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数据?
答案 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
元素),因为它们不会生成任何元素输出