Добавить корневой элемент к повторяющимся узлам в файле XML с использованием XSL

У меня в XML-файле есть повторяющиеся узлы, но у меня нет корневого элемента, как показано ниже:

<my-element>AAA</my-element>
<my-element>BBB</my-element>
<my-element>CCC</my-element>

Я хочу сгенерировать XML с помощью root следующим образом:

<my-root>
    <my-element>AAA</my-element>
    <my-element>BBB</my-element>
    <my-element>CCC</my-element>
</my-root>

Я набрал следующий код:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
  <my-root>
        <xsl:for-each select="*">
            <xsl:copy-of select="."/>
        </xsl:for-each>
  </my-root>
</xsl:stylesheet>

Но я получил ошибку, потому что XML не отформатирован правильно:

The markup in the document following the root element must be well-formed.

Я знаю, что вход должен иметь корневой элемент. Но есть ли способ установить корневой элемент для повторяющихся элементов без рута, используя XSL?

1 ответ

Ваш ввод не является правильно сформированным XML-документом, поэтому вы получаете эту ошибку. Тем не менее, это можно рассматривать как набор узлов.

В зависимости от используемого процессора XSLT вы можете каким-то образом передать набор узлов в качестве параметра, но для этого не существует "стандартного" способа.

Однако, вероятно, проще просто обернуть входной документ в некоторый элемент и обработать его позже, например, concat <root> + файл-контент + </root> во временный файл и использовать его в качестве входных данных для преобразования.

Другие вопросы по тегам