Вот очень быстрый и простой способ преобразования XSLT.
Предполагая, что ваши исходные данные выглядят так:
<?xml version="1.0"?>
<root>
<elem1 id="1">
<child1>Hello</child1>
<child2>World</child2>
</elem1>
</root>
у вас может быть XSLT-файл преобразования, который выглядит примерно так:
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="xml" indent="yes" />
<xsl:template match="elem1">
<div>
<h1>Section <xsl:value-of select="@id" /></h1>
<p><xsl:value-of select="child1" /></p>
<p><xsl:value-of select="child2" /></p>
</div>
</xsl:template>
<xsl:template match="@*|node()"> <!-- identity transform -->
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:apply-templates select="node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
поэтому вы затем передаете это через преобразование xslt верблюда, например, так или иначе
from("direct:start")
.to("xslt:myTransformFile.xsl&saxon=true")
.to("direct:end")
затем вы должны получить следующее XML-сообщение, передаваемое в direct:end
:
<?xml version="1.0"?>
<root>
<div>
<h1>Section 1</h1>
<p>Hello</p>
<p>World</p>
</div>
</root>
поскольку шаблон удостоверения скопировал все элементы, не соответствующие другому шаблону, и шаблон заменяет любой элемент, соответствующий критериям выбора, содержимым шаблона. В этом случае elem1
заменяется содержимым шаблона. Элементы <xsl:value-of ... />
интерпретируются, но любой элемент, который не начинается с <xsl:...
, является лишь частью вывода.
Простое введение в XSLT можно найти здесь: https://www.w3schools.com/xml/xsl_intro.asp.
person
Screwtape
schedule
19.06.2019
SourceClass
иTargetClass
и отображать данные из одного класса в другой как метод SourceClass, такой какTargetClass sourceObject.toTargetClass()
, или определить класс, который реализует интерфейс TypeConverters, и зарегистрировать его в Camel Context. Однако, если я сопоставляю XML с XML, я всегда использую XSLT2, так как он очень гибкий и экономичный с кодом. - person Screwtape   schedule 11.06.2019