Элемент <xsl:text>

Создает текстовый узел на основе таблицы стилей.Узлы, содержащие только пробелы, в выводе сохраняются.

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

Атрибуты

  • disable-output-escaping
    Значение по умолчанию — "no".Если указано значение "yes", текстовый узел, сформированный элементом <xsl:text>, будет выведен без escape-символов..Например, выражение "<" сформирует единственный символ.

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

    Примечание

    Элемент disable-output-escaping="yes" может привести к формированию документов в неправильном формате и поэтому должен применяться с осторожностью.Неправильный формат вывода в определенных обстоятельствах может приводить к появлению ошибок.Например, вывод с помощью метода transformNodeToObject в XML-документ требует, чтобы результат был хорошо сформирован, и поэтому может не завершиться, если атрибут disable-output-escaping повлиял на сформированность документа.Рассматривайте disable-output-escaping="yes" как расширенную функцию, применять которую можно, только хорошо понимая потенциальную опасность.

Сведения об элементе

Количество вхождений

Без ограничений

Родительские элементы

xsl:attribute, xsl:comment, xsl:copy, xsl:element, xsl:fallback, xsl:for-each, xsl:if, xsl:otherwise, xsl:message, xsl:param, xsl:processing-instruction, xsl:template, xsl:variable, xsl:when, xsl:with-param, элементы вывода

Дочерние элементы

(Нет дочерних элементов)

Замечания

В таблице стилей текст можно создавать для вывода в литеральное дерево результатов с использованием элемента <xsl:text> или без него.Однако при использовании этого элемента можно до определенной степени контролировать пробелы, созданные таблицей стилей.Например, для улучшения читаемости таблицы стилей можно записывать каждый элемент шаблона на отдельной строке и в некоторых строках использовать отступы.В этом случае пробелы становятся составной частью правила шаблона.Это может быть как желательным, так и нежелательным эффектом преобразования.

Иногда нужно вывести пробел, чтобы разделить два значения.В этом случае можно воспользоваться элементом <xsl:text>.Пробелы, заключенные внутри элемента <xsl:text>, выводятся в дерево результатов.Таким образом, следующий шаблон:

<xsl:template match="a-node">
   <xsl:text>
   </xsl:text>
</xsl:template>

— всегда будет добавлять к дереву результатов текстовый узел с новой строкой.Однако текстовые узлы, состоящие только из пробелов, не заключенных в элемент <xsl:text>, будут убраны из дерева результатов.В приведенном примере показано, как использовать пустой элемент <xsl:text/>.фраза оригинала непонятна - может быть, to do this?

Пример

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)

Чтобы протестировать преобразование XSLT и посмотреть на результаты, можно использовать следующий HTML-файл:

<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. Нажмите кнопку Преобразовать на появившейся веб-странице.

Вывод

Если использовать приведенную выше таблицу стилей в неизменном виде, все текстовые значения склеятся, образовав единую строку вывода.

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

Если убрать оба элемента <xsl:text/> из шаблона проверки элементов text, вывод получится следующий (на 7 строках):

"First line."

"Second line."

""

Если убрать из шаблона только первый элемент <xsl:text/>, вывод получится следующий (на 4 строках):

"First line."

"Second line."

""

См. также

Справочник

Элемент <xsl:comment>