Преобразовать строковую переменную (в формате xml) как часть окончательного XML - PullRequest
0 голосов
/ 24 января 2011

У меня в xsl-файле есть переменная (varXml), которая на самом деле сохраняет xml-подобный:

Формат файла xsl выглядит следующим образом:

<xsl:element name="opersApps">
   <xsl:attribute name="sts">1</xsl:attribute>
   <xsl:value-of select="$varXml"/>
</xsl:element>

И результат:

<opersApps sts="1">

<apps><det id="aaaa"><det key="name"><det id="12"/><tur key="34" id="00x"/></det></det></apps>

</opersApps>

Теперь выглядит как здесь .

Средняя часть (переменная varXml) не смотрит на xml. Как это может быть интегрировано, чтобы быть частью XML? Я хочу выглядеть так:

<opersApps sts="1">
<apps>
    <det id="aaaa">
        <det key="name">
            <det id="12"/>
            <tur key="34" id="00x"/>
        </det>
    </det>         
</apps>
</opersApps>

Спасибо.

Позже редактировать: varXml выглядит так:

 String varXml ="<det id=\"aaaa\">\n" +
                "    <det key=\"name\">\n" +
                "        <det id=\"12\"/>\n" +
                "        <tur key=\"34\" id=\"00x\"/>\n" +
                "    </det>\n" +
                "</det> ";

Ответы [ 2 ]

3 голосов
/ 25 января 2011

Есть два подхода.

(a) анализирует строку XML в дереве, а затем обрабатывает ее как дерево, используя инструкции XSLT (например, xsl: copy-of). Не существует стандартного способа синтаксического анализа XML-строки из XSLT, но многие продукты имеют расширения (например, saxon: parse ()) или позволяют писать свои собственные.

(b) скопировать строку XML в сериализованный вывод, используя disable-output-escaping = "yes". Это не будет работать во всех средах - это зависит от процессора, поддерживающего эту функцию, и от того, что вы работаете в среде, в которой используется сериализатор процессора XSLT. Но это один из немногих вариантов использования, где отключение-вывод-экранирование может быть оправдано.

2 голосов
/ 25 января 2011

Такое преобразование невозможно в чистом XSLT / XPath (версии 1.0 и 2.0).

Лучшая рекомендация : никогда не представлять документ XML илифрагмент как строка - это уничтожает разметку и выравнивает ее до одномерного текста.

Если невозможно изменить значение переменной , чтобы она содержала реальную разметку, тогданужно передать эту переменную в функцию расширения, которая будет анализировать строку и возвращать реальный документ XML.

Другое возможное решение - использовать атрибут disable-output-escaping , но этоне гарантируется работа на всех процессорах XSLT и грубо нарушает архитектурную модель XSLT.

Я рекомендую всегда избегать использования DOE .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...