Java 如何在Camel中查找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

我正在尝试从exchange主体中查找Xpath,并向标记添加一个值

<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这是我从未尝试过的。你能给我举个例子吗?