Java 在ApacheCamel中基于名称空间区分XML
我在我的项目中使用SpringBoot和ApacheCamel。该体系结构是一些XML从一个输入队列发送到Camel层,在该层使用XSLT将其转换为另一个XML,并将最终的XML发送到一个输出队列Java 在ApacheCamel中基于名称空间区分XML,java,xml,spring-boot,apache-camel,xslt-1.0,Java,Xml,Spring Boot,Apache Camel,Xslt 1.0,我在我的项目中使用SpringBoot和ApacheCamel。该体系结构是一些XML从一个输入队列发送到Camel层,在该层使用XSLT将其转换为另一个XML,并将最终的XML发送到一个输出队列 <tns:Standalone xmlns:tns="namespace1"> <tns:name>Test</tns:name> </tns:Standalone> 试验 这是使用XSLT正确转换的。问题是在我的流程中
<tns:Standalone xmlns:tns="namespace1">
<tns:name>Test</tns:name>
</tns:Standalone>
试验
这是使用XSLT正确转换的。问题是在我的流程中,传入XML的tns可能会有所不同(例如,tns作为名称空间2可以附带不同的XML)。那么XSLT就失败了。因此,我需要使用逻辑来根据tns值区分传入的xml,以便可以对两个scanarios使用不同的xslt。您能指导我如何根据tns区分输入XML吗?下面是一个简单的示例,演示如何使用单个XSLT来平等处理两个不同名称空间中的节点: XSLT1.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>
试验
如果您愿意,可以编写一个XSLT,以不同的方式处理不同名称空间中的节点。您能告诉我如何操作吗?除非您详细介绍每种情况下要执行的操作。我希望将消息转换为目标消息,并希望在这两种情况下执行相同的转换。在这两种情况下,只有传入消息的tns会有所不同,没有其他区别。谢谢,这就是我要找的。我在签入XSLT时不知道OR条件。实际上,
是union运算符,而不是OR。