<xsl:text> 元素
通过样式表生成文本节点。在输出中保留纯空白节点。
<xsl:text
disable-output-escaping = "yes" | "no">
</xsl:text>
特性
disable-output-escaping
默认值为 "no"。如果值为 "yes",通过实例化 <xsl:text> 元素生成的文本节点在输出时将不进行任何转义。例如,以下指令生成单个字符 "<"。<xsl:text disable-output-escaping="yes"><</xsl:text>
备注
因为 disable-output-escaping="yes" 可以用于生成格式不正确的文档,所以应谨慎使用。在某些情况下,如果输出的格式不正确,可能会产生错误。例如,对 XML 文档的 transformNodeToObject 要求结果的格式正确,因此,如果 disable-output-escaping 影响了格式的正确性,可能无法完成。将 disable-output-escaping="yes" 作为一项高级功能,只有了解了可能存在危险时才应使用。
元素信息
注释
在样式表中,生成的文本可以是包含或不包含 <xsl:text> 的文本结果树。但是,通过此元素可以对样式表创建的空白进行一定的控制。例如,为了更容易阅读样式表,可能需要在模板上每行编写一个元素,并在某些行上缩进。这样做可以使空白成为模板规则的一部分。这也许是所需的转换效果,也许不是。
有时,可能需要使用空白字符分隔两个数据值。可以使用 <xsl:text> 元素实现这一点。<xsl:text> 中的空白将输出到结果树中。因此,以下模板 —
<xsl:template match="a-node">
<xsl:text>
</xsl:text>
</xsl:template>
— 将总是在结果树中输出一个新的文本节点行。但是,没有使用 <xsl:text> 的纯空白文本节点将从结果树中删除。下面的示例说明如何使用空的 <xsl:text/> 元素实现这一点。
示例
XML 文件 (text.xml)
<?xml version="1.0"?>
<topic>
<text>First line.</text>
<text>Second line.</text>
<text></text>
</topic>
XSLT 文件 (text.xsl)
以下的样式表使用空的 <xsl:text/> 元素去掉模板规则生成的所有空白字符(空格、换行符和制表符)。结果显示在下面的格式化输出中。
<?xml version='1.0'?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="text">
<xsl:text/>"<xsl:value-of select="."/>"<xsl:text/>
</xsl:template>
</xsl:stylesheet>
HTML 文件 (text.htm)
以下 HTML 文件可以用于尝试 XSLT 转换和查看结果。
<html>
<head>
<title></title>
</head>
<body onload="init()">
<div><input type="text" id="xmlName" value="text.xml"></div>
<div><input type="text" id="xslName" value="text.xsl"></div>
<div><input type=button value="transform" onclick="trans();"></div>
<div id="divErr"></div>
<pre id="preRes" style="background:blue;color:gold"></pre>
</body>
<script language="javascript">
function trans()
{
xmlFile=xmlName.value;
xslFile=xslName.value;
if (xmlFile == "" || xslFile == "")
{
divErr.innerHTML = "invalid xml/xsl file names.";
}
var xsl = new ActiveXObject("MSXML2.DOMDOCUMENT.6.0");
var xml = new ActiveXObject("MSXML2.DOMDocument.6.0");
xml.validateOnParse = false;
xml.async = false;
xml.load(xmlFile);
if (xml.parseError.errorCode != 0)
divErr.innerHTML = "XML Parse Error : " + xml.parseError.reason;
xsl.async = false;
xsl.load(xslFile);
if (xsl.parseError.errorCode != 0)
divErr.innerHTML = "XSL Parse Error : " + xsl.parseError.reason;
try
{
res = xml.transformNode(xsl.documentElement);
preRes.innerText = res;
}
catch(err)
{
divErr.innerHTML = "Transformation Error:"
+err.number+"*"+err.description;
}
}
</script>
</html>
尝试一下!
将示例代码复制到适当的文件中,并将这些文件保存到本地驱动器。
双击 HTML 文件 text.htm。
单击出现的网页上的 transform 按钮。
输出
如果上面的 XSLT 样式表按原样使用,将在单个输出行中首尾相接连接所有文本值:
"First line.""Second line."""
如果将两个 <xsl:text/> 元素都从匹配 text 元素的模板中删除,将得到以下输出(共 7 行):
"First line."
"Second line."
""
如果只将第一个 <xsl:text/> 元素从模板中删除,将得到以下输出(共 4 行):
"First line."
"Second line."
""