2016-02-19 2 views
0

Я использую следующий XSLT на моем XML для сортировкиXSLT Сортировка преобразует CDATA в обычный XML Текст

<?xml version="1.0" encoding="UTF-8" ?> 
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> 

    <xsl:output method="xml" omit-xml-declaration="no" encoding="UTF-8" indent="yes" /> 
    <xsl:strip-space elements="*"/> 

    <xsl:template match="@*|node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="*[*]"> 
     <xsl:copy> 
      <xsl:apply-templates> 
       <xsl:sort select="local-name()"/> 
      </xsl:apply-templates> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="Handling|Handling//*" priority="2"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </xsl:template> 

</xsl:transform> 

Проблема здесь в том, что все символьные данные в моем результате XML преобразуется в обычный текст, который трудно для моего синтаксического анализа SAX, поскольку у данных много специальных символов и тегов HTML. Есть ли способ избежать конвертации CDATA в текст?

Для примера:

<description><![CDATA[Never program while driving.<p>]]></description> 

Преобразуется

<description>Never program while driving.&lt;p&gt;</description> 

ответ

3

xsl:output элемент принимает cdata-section-elements атрибут вам необходимо будет установить в список разделенных пробелами имен элементов, как description, содержание которого вы хотите сериализованы как секции CDATA.

<xsl:output method="xml" omit-xml-declaration="no" encoding="UTF-8" indent="yes" cdata-section-elements="description"/>

+0

Описание скважины - один из тегов. У меня есть несколько тегов с CDATA, и я хочу, чтобы все они были сохранены. Как я могу это сделать? – BrownTownCoder

+0

@BrownTownCoder Да, «список, разделенный пробелом» этих элементов, как значение атрибута 'cdata-section-elements' элемента' xsl: output'. Я просто повторяю то, что сказал Мартин. –

+0

С чистым XSLT вам нужно будет знать имена этих элементов при написании таблицы стилей и перечислить их все в 'xsl: output'. –

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