我刚开始学习XSLT,一切正常,直到我试图集中格式化。
这是我的问题:
XML
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="test.xsl"?>
<document>
<code>code</code>
<code>2<exp>3</exp></code>
<text>
This is a <special>special</special> word. 2<exp>3</exp>
</text>
</document>
XSLT
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" doctype-system="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" doctype-public="-//W3C//DTD XHTML 1.1//EN" encoding="utf-8"/>
<xsl:template name="times">·</xsl:template>
<xsl:template name="pow">
<xsl:param name="exponent"/>
<xsl:element name="sup"><xsl:value-of select="$exponent"/></xsl:element>
</xsl:template>
<xsl:template match="exp">
<xsl:call-template name="times"/>
<xsl:text>10</xsl:text>
<xsl:call-template name="pow">
<xsl:with-param name="exponent"><xsl:apply-templates/></xsl:with-param>
</xsl:call-template>
</xsl:template>
<xsl:template name="codeword">
<xsl:param name="word"/>
<xsl:element name="tt">
<xsl:value-of select="$word"/>
</xsl:element>
</xsl:template>
<xsl:template match="special">
<xsl:call-template name="codeword">
<xsl:with-param name="word"><xsl:apply-templates/></xsl:with-param>
</xsl:call-template>
</xsl:template>
<xsl:template match="document">
<xsl:element name="html">
<xsl:attribute name="xmlns">http://www.w3.org/1999/xhtml</xsl:attribute>
<xsl:element name="head">
<xsl:element name="title"><xsl:text>Title</xsl:text></xsl:element>
</xsl:element>
<xsl:element name="body">
<xsl:apply-templates select="code"/>
<xsl:apply-templates select="text"/>
</xsl:element>
</xsl:element>
</xsl:template>
<xsl:template match="code">
<xsl:element name="div">
<xsl:text>(</xsl:text>
<xsl:call-template name="codeword">
<xsl:with-param name="word"><xsl:apply-templates/></xsl:with-param>
</xsl:call-template>
<xsl:text>)</xsl:text>
</xsl:element>
</xsl:template>
<xsl:template match="text">
<xsl:element name="p">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
XHTML (使用xsltproc)
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Title</title>
</head>
<body>
<div>(<tt>code</tt>)</div>
<div>(<tt>2·103</tt>)</div>
<p>
This is a <tt>special</tt> word. 2·10<sup>3</sup>
</p>
</body>
</html>
所以,我正在尝试将源XML中的<code>
和<special>
标记转换为XHTML中的<tt>
。但是,如果我在内容中添加更多标记(例如<sup>
,通过“exp”和“pow”模板),则会在添加<tt>
时删除它们(如<tt>2·103</tt>
中所示1}}行,应为<tt>2·10<sup>3</sup></tt>
)。
我做错了什么?