Java 如何在Camel中查找Xpath并为标记添加值
我正在尝试从exchange主体中查找Xpath,并向标记添加一个值Java 如何在Camel中查找Xpath并为标记添加值,java,string,xpath,apache-camel,blueprint-osgi,Java,String,Xpath,Apache Camel,Blueprint Osgi,我正在尝试从exchange主体中查找Xpath,并向标记添加一个值 <root> <details1> <Name>Ying</Name> <status></status> </details1> <details2> <Name>Ying</Name> <status></status> </detai
<root>
<details1>
<Name>Ying</Name>
<status></status>
</details1>
<details2>
<Name>Ying</Name>
<status></status>
</details2>
</root>
英
英
我想从此exchange正文中查找
xPath=root/details2/status
,并为status添加值。由于正文字符串中存在两种状态,我将无法使用String1。替换(“”,否)
是否有任何方法可以使用camel Xpath找到正确的标记并添加值?使用Xpath,您可以找到并读取正确的标记。但是你打算怎么写呢?
一种解决方案是在xlst转换中使用xpath。
因此,您可以在camel头“myHeader”中添加要放入元素的值,然后在xslt中将其用作xsl:param
假设xml在收件箱文件夹中,那么
from("file:inbox?noop=true")
.setHeader("myHeader",constant("no"))
.to("xslt:mytransform.xslt")
.to("file:outbox/?fileName=out.xml");
将在root/details2/status中输入值“no”
其中/src/main/resources文件夹中的mytransform.xlst如下
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:param name="myHeader"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/root/details2/status[. = '']">
<status><xsl:value-of select="$myHeader"/></status>
</xsl:template>
</xsl:stylesheet>
Xpath/root/details2/status[.='']匹配空的状态元素在处理器中使用jackson这样的XML解析器查找和设置值并不容易?@SoucianceEqdamRashti我正在编写一个通用代码,我没有要映射的特定pojo。Exchange主体将是字符串。您不需要pojo。只需将您的交换转换为字符串,并将其传递给bean,然后让jackson处理其余部分,并将生成的字符串设置回交换。@SoucianceEqdamRashti这是我从未尝试过的。你能给我举个例子吗?