我在项目中使用Spring Integration。我有以下有效载荷。
<?xml version="1.0" encoding="UTF-8"?>
<PQ>
<PQContact>
<hostAddress>10.193.244.136</hostAddress>
</PQContact>
<workflowStatusComment>
<comment>I am here</comment>
</workflowStatusComment>
</PQ>
我想提取标记<workflowStatusComment>
,即workflowStatusComment <comment>I am here</comment></workflowStatusComment>
并保存以供将来使用。我不希望将来使用任何java代码来使用保存的标记信息。我想在执行结束时将保存的信息添加到另一个有效负载。我知道标题丰富,但我不知道如何使用保存的标头丰富的值而不使用java。我必须只使用Spring Integration组件来操作有效负载。
我将要添加保存的标记信息的第二个有效负载在此处:
<?xml version="1.0" encoding="UTF-8"?>
<PQ>
<PQContact>
<hostAddress>10.193.244.136</hostAddress>
<name>Ashok</name>
<userId>007</userId>
</PQContact>
</PQ>
将保存的标签信息附加到上述有效负载后,我的最终有效负载应该看起来像初始有效负载,并附带一些额外信息。如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<PQ>
<PQContact>
<hostAddress>10.193.244.136</hostAddress>
<name>Ashok</name>
<userId>007</userId>
</PQContact>
<workflowStatusComment>
<comment>I am here</comment>
</workflowStatusComment>
</PQ>
有什么办法吗?
答案 0 :(得分:1)
您可以使用<int-xml:xpath-transformer>
或#xpath()
SpEL功能从XML中提取该信息。
但你必须与我们分享你的另一个有效载荷&#34;以及如何添加此提取的内容。
使用Java获得一些解决方案可能更好,我们在此考虑如何将其转换为Spring Integration XML DSL或类似解决方案。
请修改你的问题,使其更清晰。
<强>更新强>
要将一个XML插入另一个XML,您必须与javax.xml
API进行对抗。
代码可能是这样的:
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document target = builder.parse(new StringBufferInputStream(targetXML));
Element source = builder.parse(new StringBufferInputStream(sourceXML)).getDocumentElement();
target.appendChild(source);
更新2
但我不想使用任何java代码。
好吧,如果您的目标XML可以表示为模板字符串,那么您可以在replaceFirst()
中使用<transformer>
标准expression
:
String targetXml =&#34;&#34 ;;
<transformer expression="'<?xml version="1.0" encoding="UTF-8"?>
<PQ>
<PQContact>
<hostAddress>10.193.244.136</hostAddress>
<name>Ashok</name>
<userId>007</userId>
</PQContact>
$workflowStatusCommentToken$
</PQ>'.replaceFirst('\\$workflowStatusCommentToken\\$', headers.originalXml)"/>