gpt4 book ai didi

java - Camel 拆分xml保留一些节点

转载 作者:行者123 更新时间:2023-12-04 05:18:18 26 4
gpt4 key购买 nike

我有:

<Message>
<Header>
.....some more nodes.....
</Header>

<Element>
.....some more nodes.....
</Element>

<Element>
.....some more nodes.....
</Element>
.....more Element nodes......
</Message>

我想按节点元素拆分,但保留每条消息中包含的其余消息(标题)。例如使用这个 xml 我想得到另外 2 个,它看起来像:
<Message>  <!--root node is alive -->
<Header> <!--header included in every message -->
.....some more nodes.....
</Header>

<Element> <!--only one -->
.....some more nodes.....
</Element>
</Message>

使用分离器我只能得到:
    <Element>
.....some more nodes.....
</Element>

我试图使用 jaxb marshaler 迭代 Element 节点,但这个想法失败了,因为:无法将类型“java.lang.String”作为元素编码,因为它缺少 @XmlRootElement 注释

另外,我试图使用
.split(xpath("//Element"), new MyAgreggatorStrategy())

希望我可以自己处理消息,但是每次收到的 oldMessage 中我都得到了 null。

你能分享你的想法吗。

如果我将“in”消息存储为某些属性,然后进行拆分,然后通过自定义处理器将构建我需要的一切,该怎么办?我希望, Camel 有更好的解决方案。
谢谢

更新。现在我已经实现了这个功能,就像我之前问的那样。 (将 header 存储为属性,进行拆分,恢复消息:如连接“+ header + 变形体 +

但我必须用我的附加处理器(在拆分之前和之后)包装我的所有路线。仍然认为我的问题应该是典型的和一般的,认为我错过了一些东西。

更新2。
用 1 个分离 bean 替换了 2 个处理器
public String[] splitBody(Exchange exchange) {
String header = XPathBuilder.xpath("//Header").evaluate(exchange, String.class);
String element = XPathBuilder.xpath("//Element").evaluate(exchange, String.class);

String[] arr = element.split("</Element>");
for (int i = 0; i < arr.length; i++) {
arr[i] = "<Message>" + header + arr[i] + "</Message>";
}
return arr;
}

最佳答案

简单的方法是使用 xslt 转换您的 xml,然后可以使用带有 tokenizeXML 的 Camel 分割,如 .to("xslt:").split().tokenizeXML("Message")

适用于您的案例的 XSL:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes" />
<xsl:template match="/">
<Messages>
<xsl:call-template name="Message" />
</Messages>
</xsl:template>
<xsl:template name="Message" match="/Message">
<xsl:for-each select="/Message/Element">
<Message>
<xsl:copy-of select="/Message/Header"></xsl:copy-of>
<xsl:copy-of select="."></xsl:copy-of>
</Message>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

关于java - Camel 拆分xml保留一些节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13973028/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com