2017-06-13 15 views
-1

次のXMLをデータベースクエリから取得し、その結果をAPI呼び出しに送信する必要があります。しかし、私は別のフォーマットでデータを変換したいのですが、どうすればいいですか? ご協力いただければ幸いです。データベースからデータ変換WS02

結果:私は変換する必要がどのように

`<Data> 
     <User Name="XYZ"> 
     <DETAILS> 
      <COURSE>IS</COURSE> 
      <YEAR>2016</YEAR> 
      <SUBJECT>COMPUTER SCIENCE<SUBJECT>   
     </DETAILS> 
     </User> 
     <User Name="XYZ"> 
     <DETAILS> 
      <COURSE>IS</COURSE> 
      <YEAR>2015</YEAR> 
      <SUBJECT>INFO SCIENCE<SUBJECT>   
     </DETAILS> 
     </User> 
    </Data> ` 

<Data>
<User Name="XYZ"> <DETAILS> <COURSE>IS</COURSE> <YEAR>2016</YEAR> <SUBJECT>COMPUTER SCIENCE<SUBJECT> </DETAILS> <DETAILS> <COURSE>IS</COURSE> <YEAR>2015</YEAR> <SUBJECT>INFO SCIENCE<SUBJECT>
</DETAILS> </User> </Data>

+0

2番目のサンプルが無効ですxml – simar

+0

xslt変換のように、これまでに試したことを追加してください。そうすれば、あなたはこれまでに試したことを知り、より良い答えを得ることができます。 – ophychius

+0

私はxslt変換を試していません。私はforeachループを使用してそれを行うことができるか、または仲介者を反復するか、スクリプトメディエータをスクリプト化することができるかどうか推測していました。 –

答えて

0

各メディエータは、データのセグメントを変換し、元のペイロードに置き換えるためのものです。反復メディエーターは、そのような変換には使用されません。バックエンドの呼び出しと応答の集計に使用されます。詳細はhttps://docs.wso2.com/display/ESB500/ForEach+Mediatorを参照してください。

ここで追加したサンプルから、結果をユーザー名でマージする必要があるようです。したがって、ForEach、メディエーターを繰り返すことはできません。ただし、スクリプトメディエーターを使用することはできますが、XSLTメディエータは直接的で簡単なXML操作であるため、使用する方がよいでしょう。

+0

ありがとうXSLT Mediatorが仕事をしました! –

+0

素晴らしい!答えを受け入れてください:) – maheeka

0

私はあなたがメッセージ内の属性を持つ一意のユーザーを持っていると仮定します。任意の属性名を持つ別のユーザーが含まれていません、その文書を保証名=「XYZ」を持つユーザーが存在する場合は!=「XYZ」

あなたは次のXSLT変換を使用することができます

<xsl:output indent="yes" omit-xml-declaration="yes"/> 
<xsl:template match="node()|@*"> 
    <xsl:copy> 
     <xsl:apply-templates select="node()|@*" /> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="Data"> 
    <xsl:element name="{local-name(User[last()])}"> 
     <xsl:copy-of select="User/@*" /> 
     <xsl:copy-of select="User/*" /> 
    </xsl:element> 
</xsl:template> 

+0

ありがとうございます!私は自分のデータに対応するためにいくつかの変更を加えなければなりませんでした。そして、xsltメディエーターは正常に機能しました! –