我是XSLT的新手。我有一个我不明白的块代码。
在下面的块中,'*','*[@class='vcard']'
和'*[@class='fn']'
是什么意思?
<?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="/">
<script type="text/javascript">
<xsl:text><![CDATA[function show_hcard(info) {
win2 = window.open("about:blank", "HCARD", "width=300,height=200," + "scrollbars=no menubar=no, status=no, toolbar=no, scrollbars=no");
win2.document.write("<h1>HCARD</h1><hr/><p>" + info + "</p>"); win2.document.close();
}]]></xsl:text>
</script>
<xsl:apply-templates/> </xsl:template>
<xsl:template match="*">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:apply-templates/>
</xsl:copy> </xsl:template>
<xsl:template match="*[@class='vcard']">
<xsl:apply-templates/> </xsl:template>
<xsl:template match="*[@class='fn']">
<u>
<a>
<xsl:attribute name="onMouseDown">
<xsl:text>show_hcard('</xsl:text>
<xsl:value-of select="text()"/>
<xsl:text>')</xsl:text>
</xsl:attribute>
<xsl:value-of select="text()"/>
</a>
</u> </xsl:template> </xsl:stylesheet>
答案 0 :(得分:2)
*
匹配所有元素,*[@class='vcard']
模式匹配class
属性为vcard
的所有元素。从那里你可以弄清楚*[@class='fn']
可能意味着什么; - )
我还建议你开始here。
答案 1 :(得分:2)
您的样式表有四个模板规则。在英语中,这些规则是:
(a)从顶部开始(match =“/”),首先输出一个脚本元素,然后在输入中处理下一级(xsl:apply-templates)。
(b)元素的默认规则(match =“*”)是在输出中创建一个与原始元素具有相同名称和属性的新元素,并通过处理下一级别来构建其内容。输入
(c)具有属性class =“vcard”的元素的规则是对此元素不执行任何操作,而不是在输入中处理下一级别。
(d)具有属性class =“fn”的元素的规则是输出
<u><a onMouseDown="show_hcard('X')">X</a></u>
其中X是正在处理的元素的文本内容。
更有经验的XSLT用户会将最后一条规则写为
<xsl:template match="*[@class='fn']">
<u>
<a onMouseDown="show_hcard('{.}')">
<xsl:value-of select="."/>
</a>
</u>
</xsl:template>