Элемент <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>