在 Apache Camel 中根据名称空间区分 XML

Differentiate XMLs based on namespace in Apache Camel

我在我的项目中使用 Spring Boot 和 Apache Camel。该架构是一些 XML 从输入队列到 Camel 层,在该层使用 XSLT 将其转换为另一个 XML,最后 XML 被发送到输出 queue.The XML即将到来的形式如下

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

这是使用 XSLT 正确转换的。问题出在我的流程中,传入 XML 的 tns 可能会有所不同(比如不同的 XML 可以作为 namespace2 与 tns 一起出现)。然后 XSLT 失败了。所以我需要有逻辑来根据 tns 值区分传入的 XMLs,这样我就可以对两个扫描器使用不同的 XSLT。你能指导我如何根据 tns 区分输入 XMLs 吗?

下面是一个简单示例,展示了如何使用单个 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>