2010-03-15 2 views
0

У меня есть следующие XMLXSLT в CDATA JS

<AAA> 
    <BBB>Total</BBB> 
</AAA> 

Преобразование с помощью следующей XSLT с помощью XSL: копирование тега, потому что я хочу использовать XML, чтобы создать XML-документ в JS ,

<xsl:template match="/"> 
    <![CDATA[ 
    function myFunc() { 
     xmlStr = ']]><xsl:copy-of select="/"/><![CDATA['; 
    } 
    ]]> 
</xsl:template> 

Выход выглядит следующим образом

function myFunc() { 
     xmlStr = '<AAA> 
    <BBB>Total</BBB> 
</AAA>'; 
    } 

JS не нравится из-за недостающую заканчивающуюся точку с запятой строки. Как я могу исправить мой XSL, чтобы получить результат ниже:

function myFunc() { 
    xmlStr = '<AAA><BBB>Total</BBB></AAA>'; 
} 

Я попытался нормализуют-пространство() и перевод(), но они раздеться теги из XML.

Спасибо!

ответ

1

Используйте xsl:strip-space element:

<xsl:strip-space elements="AAA"/> 
<xsl:template match="/"> 
<![CDATA[ 
    function myFunc() { 
    xmlStr = ']]><xsl:copy-of select="AAA"/><![CDATA['; 
    } 
]]> 
</xsl:template> 

Это удалит все пробелы из элемента AAA перед копированием его. Вы должны следить, хотя, потому что он удалит любые внутренние интервалы с текстовых узлов под AAA, так что это своего рода перебор. Если у вас есть некоторые элементы, где необходимо сохранить пространство, укажите их как исключения в элементе xsl:preserve-space. Но, судя по вашему примеру, я не думаю, что это будет проблемой.

+1

@ davomarti: Убедитесь, что ваш XML никогда не может содержать ни одной кавычки, либо ваш JavaScript будет работать. В частности, убедитесь, что ваш XML не содержит пользовательских данных, поскольку этот подход несет высокий риск XSS. Лучше всего запросить XML отдельно от сервера через AJAX вместо того, чтобы прямо вставлять его в ваш JS-код. – Tomalak

+0

Thanks Welbog, Вот что я искал. Tomalak, Это делает много смысла, но я работаю внутри рамки, и лучшее, что я могу сделать, это получить xml через xsl. – davomarti

+0

@ davomarti - Подсказка: если ответ решил вашу проблему, вы должны отметить его как принятый. – Tomalak

Смежные вопросы