Как я могу перевести 'в апостроф в xslt - PullRequest
0 голосов
/ 11 июля 2011

Соответствующие части кода:

<xsl:variable name="apos">'</xsl:variable>
<xsl:variable name="and" select='"&#039;"' />

<xsl:value-of select="translate(products_name/node(),$and,$apos)"/>

Я думаю, что это должно быть простым делом, и приведенный выше код должен работать, но это никак не влияет на вывод.

(Я использовал переменные, потому что имена не могут начинаться в амперсанде, а использование только апострофа вызывает ошибку компиляции.)

Я протестировал код, чтобы убедиться, что перевод работает с использованием строкошибок нет.

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

2 голосов
/ 11 июля 2011

Вы на правильном пути, но еще не пришли: ваша проблема в том, что XSL - это язык, который сам написан с использованием XML.Для всех языков XML анализатор автоматически декодирует объекты XML.Движок XSLT появляется только позже.

В результате этого движок XSLT не распознает и не может различить, написали ли вы ' или &#039; - это одно и то же.Для вашей проблемы это имеет два эффекта:

  1. Вы должны использовать переменную, содержащую апостроп - это потому, что сам апостроф зарезервирован для строковых литералов в выражениях, которые могут содержать функции.Даже для <xsl:value-of select="translate(products_name/node(),$and,'&#039;')"/> синтаксический анализатор XML преобразует сущность в апостроф, т.е. <xsl:value-of select="translate(products_name/node(),$and,''')"/>

  2. Вы должны экранировать амперсанд, используемый в строке, которую вы ищете: для механизма XSLпеременная "and" содержит значение ', т.е. вы заменяете апостроф апострофом.

Рабочий раствор:

<xsl:variable name="apos">'</xsl:variable>
<xsl:value-of select='translate(text(), "&amp;#039;", $apos)'/>
1 голос
/ 11 июля 2011

Технически, нет никакой разницы в каком-либо XML между &apos;, &#39; и &#x27;, это разные способы представления абсолютно одного и того же. Следовательно, этот translate вызов не должен ничего делать.

Это зависит от того, как вы преобразуете его, где этот вывод (значение атрибута или элемент?) И как сериализовать вывод в текст, но ваша проблема не с вашим XSLT.

...