2017-09-25 13 views
0

私は交換体からXpathを見つけようとしており、タグに値を追加しようとしています。Xpathを見つけてキャメルのタグに値を追加する方法

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

私は見つけたいxPath=root/details2/statusこの交換体から、ステータスに値を追加します。本文に2つのステータスがあるため、文字列は使用できませんString1.replace('<status></status>',<status>no</status>)ラクダのXpathを使用して正しいタグを見つけて値を追加する方法はありますか?

+0

プロセッサ内のjacksonのようなXMLパーサーを使用して、設定値を簡単に使用できませんか? –

+0

@SoucianceEqdamRashti私はGenericコードを書いていますが、マップする特定のpojoはありません。 Exchange本体は文字列になります。 – 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"); 

がroot/details2 /ステータスに "ノー" の値を置く受信ボックスフォルダにあります。

どこ/ 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 /ルート/ details2 /ステータス[のようなものです。 = '']空のステータス要素に一致します

関連する問題