在 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>
我在我的项目中使用 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>