Элемент <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"><</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>
Попробуйте!
Скопируйте вышеприведенный код и сохраните его в соответствующие файлы на локальном жестком диске.
Дважды щелкните HTML-файл text.htm.
Нажмите кнопку Преобразовать на появившейся веб-странице.
Вывод
Если использовать приведенную выше таблицу стилей в неизменном виде, все текстовые значения склеятся, образовав единую строку вывода.
"First line.""Second line."""
Если убрать оба элемента <xsl:text/> из шаблона проверки элементов text, вывод получится следующий (на 7 строках):
"First line."
"Second line."
""
Если убрать из шаблона только первый элемент <xsl:text/>, вывод получится следующий (на 4 строках):
"First line."
"Second line."
""