XSLT: как преобразовать XML-узел в строку

  TESTING   

XSL:

   

Я пытаюсь преобразовать XML-узлы в строку с помощью XSL. Есть предположения?

Вам нужно сериализовать узлы. Самый простой для вашего примера будет что-то вроде

        <  >  </  >     

Вышеупомянутые шаблоны сериализатора не обрабатывают, например, атрибуты, пространства имен или зарезервированные символы в текстовых узлах, но концепция должна быть ясной. Процесс XSLT работает в дереве узлов, и если вам нужно иметь доступ к «тегам», вам необходимо сериализовать узлы.

Основываясь на решении @jelovirt, вот более полный fragment кода:

  <     >  </  >    />        ="  "     в  <     >  </  >    />        ="  "     в  <     >  </  >    />        ="  "     

Саксон, необходимый для следующего решения. Я нахожу это здесь

                    

В XSLT версии 3.0. См. http://myxsl.net/xslcompiledtransform/extensions/w3c.xpath.xsl#fn-serialize . Это работало для меня, используя SaxonPE.

            
     

Обновлено на основе комментариев ..

Хорошо, я никогда не делал то, что вам нужно раньше, так что возьмите это с этой солью (я ее крышу). В основном вам нужно очень беспокоиться о двух вещах: персонажах, которым требуется экранирование и пробел. В этом случае строка, которую empo предоставила вам в комментариях выше, больше того, что вам нужно. Ниже вы можете сделать свой XSL-вывод следующим:

          <>   </>   

Вам по-прежнему нужно иметь дело с другими персонажами, которым требуется экранирование, например «« И я считаю, что вы можете использовать перевод или замену для тех

Мое решение:

    <     ="  "    >       </  >  
                    

Найдите «XML-принтер». Или просто взгляните на XSLT-код моего XPath Visualizer (хотя он отображает представление XML в браузере, но вы получите эту идею).

О «конвертировать узел в строку»

С помощью XSLT 1.0 вы можете использовать функцию string() XPath1.0 библиотеки основных функций, которая преобразует узел в строку:

     

См. «Функция: строковая строка (объект)» в разделе 4.3 .

Об «конвертировании узла в XML довольно-принтер»

Это еще один вопрос о «XML-принтере» или «XML-дампе» … См. Хорошие ответы здесь.

Мое решение для Saxon HE и имеет следующие преимущества:

  • он не требует лицензирования
  • поддерживает пространства имен, CDATA, экранирование специальных символов и множество продвинутых функций XML.

Я успешно пробовал Saxon HE 9.5.X.

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

 import java.io.StringWriter; import net.sf.saxon.expr.XPathContext; import net.sf.saxon.lib.ExtensionFunctionCall; import net.sf.saxon.lib.ExtensionFunctionDefinition; import net.sf.saxon.om.Sequence; import net.sf.saxon.om.StructuredQName; import net.sf.saxon.s9api.Processor; import net.sf.saxon.s9api.SaxonApiException; import net.sf.saxon.s9api.Serializer; import net.sf.saxon.s9api.XdmValue; import net.sf.saxon.trans.XPathException; import net.sf.saxon.value.SequenceType; import net.sf.saxon.value.StringValue; @SuppressWarnings("serial") public class XmlSerializer extends ExtensionFunctionDefinition { @Override public StructuredQName getFunctionQName() { return new StructuredQName("vis", "my.custom.uri", "serialize-xml"); } @Override public SequenceType[] getArgumentTypes() { return new SequenceType[] { SequenceType.SINGLE_NODE }; } @Override public SequenceType getResultType(SequenceType[] sequenceTypes) { return SequenceType.SINGLE_STRING; } @Override public ExtensionFunctionCall makeCallExpression() { return new ExtensionFunctionCall() { @Override public Sequence call(XPathContext ctx, Sequence[] secs) throws XPathException { StringWriter escr = new StringWriter(); try { if (secs.length == 0) { throw new XPathException("Missing argument"); } else { Serializer serializer = new Processor(ctx.getConfiguration()).newSerializer(escr); serializador.setOutputProperty(Serializer.Property.OMIT_XML_DECLARATION, "yes"); serializer.serializeXdmValue(XdmValue.wrap(secs[0])); } return new StringValue(escr.toString()); } catch (SaxonApiException ex) { throw new XPathException("Error when invoking serialize-xml()", ex); } } }; } } 

Вы можете использовать эту функцию следующим образом:

  

Обратный процесс описан здесь .

  • динамический xpath в xslt?
  • Проверьте, является ли строка пустой или пустой в XSLT
  • XSLT 3-уровневая группировка по атрибутам
  • Функция замены XSLT не найдена
  • Форматировать дату в XML через XSLT
  • XSLT эквивалент для JSON
  • Сохранение ссылок на объекты при преобразовании XML с помощью XSLT?
  • Преобразование элемента xml, содержимое которого находится внутри CDATA
  • Нужна помощь в создании XSLT, у меня есть исходный и целевой XML
  • XSLT Transform не работает, пока я не удаляю корневой узел
  • У XSLT есть функция Split ()?
  • Interesting Posts

    INSTALL_FAILED_NO_MATCHING_ABIS при установке apk

    График в excel для представления корреляции трех параметров

    Проблема с кодом: строка формата не является строковым литералом

    Как поддерживать порядок ссылок типа поиска Google , А не переупорядочивать?

    Есть ли комбинация клавиш для «отмены выбора» в проводнике Windows?

    Android – Сохранить изображение с URL на SD-карту

    Как изменить цвет кнопки в Android при нажатии?

    Если значения марки, размера, частоты и задержки в секунду для двух наборов ОЗУ одинаковы, будут ли они работать корректно в двухканальном режиме?

    MyISAM против InnoDB

    Проверить или проверить, существует ли лист

    Маржа, сжимающаяся в flexbox

    Как хранить и извлекать учетные данные из диспетчера учетных данных Windows Vault?

    Значок навигации панели инструментов не установлен

    Форматирование номеров телефонов и кредитных карт в AngularJS

    Используйте собственный IComparer с Linq OrderBy

    Давайте будем гением компьютера.