Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在ApacheCamel中基于名称空间区分XML_Java_Xml_Spring Boot_Apache Camel_Xslt 1.0 - Fatal编程技术网

Java 在ApacheCamel中基于名称空间区分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正确转换的。问题是在我的流程中

我在我的项目中使用SpringBoot和ApacheCamel。该体系结构是一些XML从一个输入队列发送到Camel层,在该层使用XSLT将其转换为另一个XML,并将最终的XML发送到一个输出队列

<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。