Как удалить лишнее объявление xml из xml в XSLT?

Я преобразую файл idml в xml в моем проекте. У меня проблема с дополнительным объявлением xml. Вот часть файла idml: `

<Content> &lt;?xml version="1.0" encoding="UTF-16"
    standalone="yes"?&gt;&#x2028;&lt;math&gt;
    &lt;/math&gt;</Content>

`Это вывод, который я получаю после преобразования:

    <?xml version="1.0" encoding="UTF-8"?>
<content>
    <?xml version="1.0" encoding="UTF-16" standalone="yes"?>
    <math></math>
</content>

Моя задача заменить &lt; а также &gt; с <и>, тогда я получил эту проблему..

Я пробовал много способов сделать это (не стандартные вещи).. Наконец, я попытался заменить слово xml replace пробелом и преобразовать его в PI и преобразовать PI в режиме постобработки.. но это также не удалось

<xsl:template match="Content">
    <xsl:if test=".[contains(text(),'math')]">
         <xsl:value-of select="replace(./text(),'xml','')”/>
    </xsl:if>
</xsl:template>

Вывод я хочу сгенерировать:

<?xml version="1.0" encoding="UTF-8"?> <content><math></math></content>

И я использую Saxon 9.7.0HE для своей разработки.

Пожалуйста, помогите мне решить эту проблему.. Спасибо..!

1 ответ

В version="3.0" таблицу стилей, вы можете использовать

<xsl:template match="Content">
    <content>
        <xsl:copy-of select="parse-xml(normalize-space())"/>
    </content>
</xsl:template>

однако с вашим входным фрагментом это не работает, так как содержимое не является правильно сформированным, учитывая &#x2028; символ перед корневым элементом экранированной разметки. Так что не совсем понятно, какой у вас там контент, если это не документ XML или фрагмент XML, то ни parse-xml ни parse-xml-fragment поможет.

Я знаю, что это старый вопрос, но люди, которые сталкиваются с ним, все же могут захотеть получить ответ, который применим к version="1.0"таблица стилей. Итак, вот решение, которое работает, просто удаляя первую строку / объявление XML:

  <xsl:template match="Content">
    <xsl:value-of disable-output-escaping="yes" select="replace(., '^\s*&lt;\?xml.*?\?&gt;', '')"/>
  </xsl:template>
Другие вопросы по тегам