Отключить экранирование выходных данных не работает для атрибута в xslt - PullRequest
3 голосов
/ 25 октября 2011

У меня есть следующий xml-узел:

<name>P &amp; P</name>

И следующий XSL

<a href="example.htm" >

    <xsl:attribute name="title">
       <xsl:value-of select="name" disable-output-escaping="yes"></xsl:value-of>
    </xsl:attribute>    


     <xsl:value-of select="name" disable-output-escaping="yes"></xsl:value-of>
</a>

, который компилируется в этот HTML

<a href="example.com" title="P &amp;amp; P">
  P &amp; P
</a>

Так чтоэкранирование сработало для значения (текст между <A></A>), но не для атрибута.

Я что-то здесь упускаю?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 25 октября 2011

Из комментария ОП :

Мне нужен этот xml (P & P) в атрибуте title HTML-тега.Лучше всего найти лучшее решение!

То, что вам нужно, может быть сделано совершенно без DOE .

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="/*">
     <a href="example.htm" title="{.}">
       <xsl:value-of select="."/>
     </a>
 </xsl:template>
</xsl:stylesheet>

При применении кследующий XML-документ :

<t>P &amp; P</t>

желаемый, правильный результат:

<a href="example.htm" title="P &amp; P">P &amp; P</a>
1 голос
/ 25 октября 2011

Я смотрю вокруг и думаю, вот почему: (если я правильно понимаю)?

Вне спецификации: (http://www.w3.org/TR/xslt)

Это ошибка для выхода, который отключается для текстового узла, который используется для чего-то кроме текстового узла в дереве результатов. Таким образом, это ошибка, чтобы отключить экранирование выходных данных для xsl: value-of или xsl: текстовый элемент, который используется для генерации строкового значения комментарий, инструкция обработки или узел атрибута; это также ошибка преобразовать фрагмент результирующего дерева в число или строку, если Фрагмент результирующего дерева содержит текстовый узел, для которого экранирование было отключен. В обоих случаях процессор XSLT может сигнализировать об ошибке; если оно не сигнализирует об ошибке, он должен восстановить, игнорируя атрибут disable-output-escaping.

Таким образом, отключение вывода для экранирования атрибута просто невозможно. Обходной путь, который я вижу, состоит в том, чтобы создать строку «вручную» как XSL - Как отключить экранирование выходных данных для атрибута?

Все еще трудно поверить, что я не скучаю по чему-либо. тривиально здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...