2017-09-25 43 views
0

我试图从交换主体中找到一个Xpath并向该标签添加一个值。如何找到一个Xpath并将值添加到骆驼中的标签

<root> 
<details1>  
    <Name>Ying</Name> 
    <status></status> 
</details1> 
<details2>  
    <Name>Ying</Name> 
    <status></status> 
</details2> 
</root> 

我想找到xPath=root/details2/status从这个交换的身体和增加价值的状态。由于在身体中有两个状态发生字符串我将无法使用String1.replace('<status></status>',<status>no</status>)有什么方法可以使用骆驼Xpath来找到正确的标记并添加值?

+0

在处理器中使用像XML解析器这样的XML解析器是否更容易找到并设置值? –

+0

@SoucianceEqdamRashti我正在写一个通用代码,我没有一个特定的pojo来映射。交换机构将是一个字符串。 – tvshajeer

+0

你不需要一个pojo。只需将您的交换转换为字符串并将其传递给bean,然后让jackson处理其余部分,并将生成的字符串设置回交换。 –

回答

1

使用xpath可以找到并读取正确的标记。但你打算怎么写呢? 一个解决方案可能是在xlst转换中使用xpath。 因此,您可以将要放入元素的值添加到骆驼头文件“myHeader”中,然后将其作为xsl:param在xslt中使用。

假设XML是在收件箱文件夹,然后

from("file:inbox?noop=true") 
.setHeader("myHeader",constant("no")) 
.to("xslt:mytransform.xslt") 
.to("file:outbox/?fileName=out.xml"); 

将会把值“无”,在根/ details2 /状态。

如果你/ src目录/主/资源文件夹内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 /根/ details2 /状态[。 ='']匹配空状态元素