Как удалить лишнее объявление xml из xml в XSLT?
Я преобразую файл idml в xml в моем проекте. У меня проблема с дополнительным объявлением xml. Вот часть файла idml: `
<Content> <?xml version="1.0" encoding="UTF-16"
standalone="yes"?>
<math>
</math></Content>
`Это вывод, который я получаю после преобразования:
<?xml version="1.0" encoding="UTF-8"?>
<content>
<?xml version="1.0" encoding="UTF-16" standalone="yes"?>
<math></math>
</content>
Моя задача заменить <
а также >
с <и>, тогда я получил эту проблему..
Я пробовал много способов сделать это (не стандартные вещи).. Наконец, я попытался заменить слово 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>
однако с вашим входным фрагментом это не работает, так как содержимое не является правильно сформированным, учитывая 

символ перед корневым элементом экранированной разметки. Так что не совсем понятно, какой у вас там контент, если это не документ 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*<\?xml.*?\?>', '')"/>
</xsl:template>