<xsl:text> 元素

通过样式表生成文本节点。在输出中保留纯空白节点。

<xsl:text
  disable-output-escaping = "yes" | "no">
</xsl:text>

特性

  • disable-output-escaping
    默认值为 "no"。如果值为 "yes",通过实例化 <xsl:text> 元素生成的文本节点在输出时将不进行任何转义。例如,以下指令生成单个字符 "<"。

    <xsl:text disable-output-escaping="yes">&lt;</xsl:text>
    

    备注

    因为 disable-output-escaping="yes" 可以用于生成格式不正确的文档,所以应谨慎使用。在某些情况下,如果输出的格式不正确,可能会产生错误。例如,对 XML 文档的 transformNodeToObject 要求结果的格式正确,因此,如果 disable-output-escaping 影响了格式的正确性,可能无法完成。将 disable-output-escaping="yes" 作为一项高级功能,只有了解了可能存在危险时才应使用。

元素信息

出现次数

无限制

父元素

xsl:attributexsl:commentxsl:copyxsl:elementxsl:fallbackxsl:for-eachxsl:ifxsl:otherwisexsl:messagexsl:paramxsl:processing-instructionxsl:templatexsl:variablexsl:whenxsl:with-param、输出元素

子元素

(无子元素)

注释

在样式表中,生成的文本可以是包含或不包含 <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>

尝试一下!

  1. 将示例代码复制到适当的文件中,并将这些文件保存到本地驱动器。

  2. 双击 HTML 文件 text.htm

  3. 单击出现的网页上的 transform 按钮。

输出

如果上面的 XSLT 样式表按原样使用,将在单个输出行中首尾相接连接所有文本值:

"First line.""Second line."""

如果将两个 <xsl:text/> 元素都从匹配 text 元素的模板中删除,将得到以下输出(共 7 行):

"First line."

"Second line."

""

如果只将第一个 <xsl:text/> 元素从模板中删除,将得到以下输出(共 4 行):

"First line."

"Second line."

""

请参阅

参考

<xsl:comment> 元素