2017-02-03 11 views
0

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

<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 на замену пространством и преобразовать его в PI и преобразовать PI в сообщение обработка mode..but также не удалось

<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 для моего развития.

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

+0

Какой именно процессор XSLT 2.0 вы используете? Каков результат, который вы хотите создать для ввода, который вы разместили? –

+0

@ Martin Я хочу, чтобы генерировать выходной сигнал следующим образом: и я использую Saxon 9 в моем развитии .. – user2490093

+0

Измените вопрос и показать вывод, который вы хотите найти в виде фрагмента кода. Что касается Saxon 9, какая версия точно? Например, Saxon 9.7 имеет поддержку 'parse-xml', более ранние коммерческие версии поддерживают аналогичную функцию расширения, таким образом вы можете анализировать содержимое элемента Content в качестве XML и выводить узлы, и вы избавитесь от вложенное, экранированное объявление XML в чистом виде. –

ответ

0

В 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 не помогут.

+0

Возможно, вы имели в виду xslt 3.0 в качестве версии здесь? Я использую xslt 2.0 .. & # x2028; обрабатываются в коде, но я удаляюсь по мере усложнения большего количества узлов. Если я верный ввод, это idml и вывод, который я получаю, это xml (оба являются форматами xml). – user2490093

+0

Единственный способ с Saxon 9.7 HE разобрать XML внутри данных элемента с помощью 'parse-xml' - установить' version = 3.0 ", поэтому вам нужно будет изменить версию, если вы хотите использовать этот подход. –

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

  • Нет связанных вопросов^_^