Использование Xsl: value-of преобразует & в URL в & - PullRequest
4 голосов
/ 07 апреля 2011

у меня есть что-то вроде XML

<root>
<testxml>
<details  name="test" url="http://www.test.com/test.aspx?val=100&val2=200" />
</testxml>
<root>

Когда я преобразую этот xml, используя xslt, в другой xml

<xsl:output method="html" indent="yes" encoding="UTF-8"  />

<xsl:template match="root/testxml/details">
    <convert>
        <xsl:attribute name="url">
            <xsl:value-of select="@url"/>
        </xsl:attribute>
    </convert>

Я получаю вывод результата как это

<convert url="http://www.test.com/test.aspx?val=100&amp;val2=200">

вместо

<convert url="http://www.test.com/test.aspx?val=100&val2=200">

проблема здесь такова: & в url меняется на & amp; как мне этого избежать, я хочу & в URL как &. (Not & amp;)

я пытался <xsl:value-of disable-output-escaping="yes" select="@url" /> также, но не используется.

Может кто-нибудь помочь мне в этом ..

Ответы [ 3 ]

4 голосов
/ 07 апреля 2011

Я получаю вывод результата, как эта

вместо

проблема здесь: & в URL меняется на & amp;

Нет проблем, и URL-адрес вообще не изменяется :

Для проверки используйте преобразование, подобное следующему:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="/*">
     <xsl:value-of select="@url"/>
 </xsl:template>
</xsl:stylesheet>

, когда это преобразованиеприменяется к следующему документу XML:

<convert url="http://www.test.com/test.aspx?val=100&amp;val2=200"/>

В результате получается :

http://www.test.com/test.aspx?val=100&val2=200

Таким образом, URL-адрес не был изменен каким-либо образоми в нем все еще только один символ &.

То, что вы наблюдаете, - это обязательное экранирование некоторых специальных символов (обычно < и &) в XML, как предписано спецификацией XML.

Экранирование некоторых специальных символов никогда не изменяет содержимое экранированной строки - только так, как это выглядит, когда оно является частью XML-документа.

как я могу избежать этого, я хочу & в URL как &. (Не & amp;)

Вы не можете, и, как показано выше, избегать нечего.

1 голос
/ 07 апреля 2011

Димитр совершенно прав - амперсанд в XML всегда должен быть экранирован, и неясно, почему вы так стараетесь его предотвратить.

Хотя я озадачен - вы говорите, что генерируете XML, но используете метод вывода HTML, но вы генерируете элемент <convert>, который не определен в HTML. Поэтому я боюсь, что вы немного смущены.

1 голос
/ 07 апреля 2011

& должен быть экранирован как & в URL в документе XML.Вы не можете иметь амперсанд без экранирования и тому подобное.

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