XSLT передать узел в CDATA JS - PullRequest
0 голосов
/ 15 марта 2010

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

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

Преобразование его с помощью следующего xslt с использованием тега xsl: copy-of, поскольку я хочу использовать 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>';
}

Я пробовал normalize-space () и translate (), но они удаляют теги из xml.

Спасибо!

1 Ответ

1 голос
/ 15 марта 2010

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

<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. Но, судя по вашему примеру, я не думаю, что это будет проблемой.

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