apachecamel中基于名称空间的java区分xmls

fcy6dtqo  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(269)

我在我的项目中使用springboot和apachecamel。该体系结构是一些xml从一个输入队列到camel层,在那里它使用xslt转换成另一个xml,最后的xml被发送到一个输出队列

<tns:Standalone xmlns:tns="namespace1">
    <tns:name>Test</tns:name>
</tns:Standalone>

这是正确的转换使用xslt。问题是在我的流程中,传入xml的tns可能会有所不同(例如,不同的xml可以将tns作为名称空间2提供)。那么xslt就失败了。因此,我需要使用逻辑来根据tns值区分传入的xml,这样我就可以对两个scanario使用不同的xslt。您能指导我如何根据tns区分输入xml吗?

5m1hhzi4

5m1hhzi41#

下面是一个简单的示例,演示如何使用单个xslt来平等地处理两个不同名称空间中的节点:
xslt 1.0版

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ns1="namespace1"
xmlns:ns2="namespace2"
exclude-result-prefixes="ns1 ns2">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:template match="/ns1:Standalone | /ns2:Standalone">
    <output>
        <xsl:value-of select="ns1:name | ns2:name"/>
    </output>
</xsl:template>

</xsl:stylesheet>

当此样式表应用于以下输入之一时:
xml 1

<tns:Standalone xmlns:tns="namespace1">
    <tns:name>Test</tns:name>
</tns:Standalone>

xml 2

<tns:Standalone xmlns:tns="namespace2">
    <tns:name>Test</tns:name>
</tns:Standalone>

结果将是:
结果

<?xml version="1.0" encoding="UTF-8"?>
<output>Test</output>

相关问题