Поделиться через


Элемент <xsl:preserve-space>

Сохраняет текстовые узлы, состоящие только из пробелов, которые могут отобразиться в элементах, указанных атрибутом elements.

<xsl:preserve-space
  elements = tokens />

Атрибуты

  • elements
    Этот атрибут является обязательным.Значение представляет собой разделенный пробелами список маркеров узлов, в которых сохраняются текстовые узлы, состоящие только из пробелов.

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

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

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

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

xsl:stylesheet, xsl:transform

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

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

Замечания

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

По умолчанию сохраняются все текстовые узлы, содержащие только пробелы.Если имя элемента совпадает с шаблоном имен в элементе <xsl:strip-space>, оно исключается из набора имен элементов с сохранением пробелов.Если имя элемента совпадает с проверкой имени в элементе <xsl:preserve-space>, оно возвращается в набор имен элементов с сохранением пробелов.

Дополнительные сведение см. в разделе 3.4 главы «Вырезание пробелов» Рекомендаций консорциума W3 по XSLT по адресу www.w3.org/TR/xslt.

Пример

Следующий пример демонстрирует сохранение и вырезание текстовых узлов, состоящих только из пробелов, с помощью элемнтов <xsl:preserve-space> и <xsl:strip-space>.

XML-файл (source.xml)

<?xml version="1.0"?>
<document>
<text>   </text>
<text>  ;</text>
<text>
This is a   sample text 
    
</text>
<code>   </code>
<code>  ;</code>
<code>
This is a   sample code 
    
</code>
</document>

XSLT-файл (trans.xsl)

<?xml version='1.0'?>
<xsl:stylesheet version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="text"/>
  <!-- 
     The following xsl:preserve-space is not necessary.
     It is included to emphasize the fact that white-space-only
     text nodes are to be preserved on the <code> elements.
   -->
  <xsl:preserve-space elements="code"/>
  <xsl:strip-space elements="text"/>

  <xsl:template match="/">
    code elements:
    <xsl:apply-templates select="//code"/>

    text elements:
    <xsl:apply-templates select="//text"/>
  </xsl:template>

  <xsl:template match="text">
     text # <xsl:value-of select="position()"/>
     has <xsl:value-of select="count(text())"/> text(). 
     "<xsl:value-of select="translate(.,' &#10;&#13;&#9;', '-NRT')"/>"
  </xsl:template>


  <xsl:template match="code">
     code # <xsl:value-of select="position()"/>
     has <xsl:value-of select="count(text())"/> text(). 
     "<xsl:value-of select="translate(.,' &#10;&#13;&#9;', '-NRT')"/>"
  </xsl:template>

</xsl:stylesheet>

Попробуйте!

  1. Скопируйте вышеприведенный код и сохраните его в соответствующие файлы на локальном жестком диске.

  2. Запустите XSLT-преобразование, используя программу преобразования из командной строки (msxsl.exe), как показано далее.

    msxsl source.xml trans.xsl

    Важно!

    Не начинайте преобразование из Internet Explorer.Браузер выполняет некоторые операции вырезания пробелов, не совместимые со спецификациями XSLT.Это может привести к неправильному отображению XSLT-преобразований.

Output

Далее приведен стандартное устройство вывода.

code elements:

code # 1

has 1 text().

"---"

code # 2

has 1 text().

"--;"

code # 3

has 1 text().

"NThis-is-a-Tsample-codeTNTN"

text elements:

text # 1

has 0 text().

""

text # 2

has 1 text().

"--;"

text # 3

has 1 text().

"NThis-is-a-Tsample-textTNTN"

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

См. также

Справочник

Элемент <xsl:strip-space>