В XSLT как выбрать / скопировать часть документа только в виде текста? - PullRequest
0 голосов
/ 17 ноября 2009

Как в XSLT выбрать / скопировать часть документа только в виде текста?

Изменение, которое я хочу сделать, состоит в том, чтобы взять часть дерева (теги и оба значения) и вывести его только в виде текста (желательно в скобках в кодировке HTML).

Я попытался поместить CDATA вокруг своей копии, но он просто поместил команду копирования внутри моего документа.

Edit: Смотрите комментарий ниже

Ответы [ 2 ]

1 голос
/ 17 ноября 2009

Это странное требование.

Поскольку XSLT работает с анализируемой моделью документа, вы не можете сделать это надежно. В частности, различие между эквивалентными обозначениями обязательно будет потеряно. Эквивалентные обозначения включают такие вещи, как <tag></tag> против <tag/> или &eacute; против é.

При этом общий подход, который может сработать, заключается в использовании атрибута mode xsl:template и xsl:apply-template для переключения в режим, который явно отображает все элементы в виде текста. По сути, вы пишете XML-сериализатор в XSLT.

Одна проблема заключается в том, что вам придется дважды экранировать специальные символы, такие как <>"', когда они присутствуют в значениях атрибутов и текстовых узлах. И XSLT довольно неэффективен при подобном разбрасывании строк.

Другая проблема заключается в разумном отображении префиксов пространства имен. Вы почти наверняка можете сделать это, но это будет довольно ужасно.

1 голос
/ 17 ноября 2009

Попробуйте, но обратите внимание, что он не будет правильно обрабатывать вложенные CDATA:

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

<xsl:copy-of select="..." />

<xsl:text>]]</xsl:text>
<xsl:text disable-output-escaping="yes">&gt;</xsl:text>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...