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

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

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

  1. <tns:Standalone xmlns:tns="namespace1">
  2. <tns:name>Test</tns:name>
  3. </tns:Standalone>

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

5m1hhzi4

5m1hhzi41#

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

  1. <xsl:stylesheet version="1.0"
  2. xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  3. xmlns:ns1="namespace1"
  4. xmlns:ns2="namespace2"
  5. exclude-result-prefixes="ns1 ns2">
  6. <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
  7. <xsl:template match="/ns1:Standalone | /ns2:Standalone">
  8. <output>
  9. <xsl:value-of select="ns1:name | ns2:name"/>
  10. </output>
  11. </xsl:template>
  12. </xsl:stylesheet>

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

  1. <tns:Standalone xmlns:tns="namespace1">
  2. <tns:name>Test</tns:name>
  3. </tns:Standalone>

xml 2

  1. <tns:Standalone xmlns:tns="namespace2">
  2. <tns:name>Test</tns:name>
  3. </tns:Standalone>

结果将是:
结果

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <output>Test</output>
展开查看全部

相关问题