2017-08-29 4 views
0

以下は私の必要条件です オーダー入力にItemがあり、各アイテムにサブアイテムが含まれていますが、タグ名は同じ "Item"です。xsltで親と子のxmlタグが同じ名前を持つ場合、同じ構造をソースからターゲットに維持する方法

<OrderInput> 
    <Item> 
     <ItemId> 
     <ItemName> 
     <ItemDesc> 
     <Item> 
      <ItemId> 
      <ItemName> 
      <ItemDesc> 
      <Item> 
       <ItemId> 
       <ItemName> 
       <ItemDesc> 
      </Item> 
     </Item> 
    </Item> 
    <Item> 
     <ItemId> 
     <ItemName> 
     <ItemDesc> 
     <Item> 
      <ItemId> 
      <ItemName> 
      <ItemDesc> 
     </Item> 
    </Item> 
</OrderInput> 

xsltを使用して変換した後は、次のようになります。親ノードとチルスノードの名前は "アイテム"のような "ライン"です。

<OrderOutput> 
    <OrderLine> 
    <Line> 
     <LineId> 
     <LineName> 
     <LineDesc> 
     <Line> 
      <LineId> 
      <LineName> 
      <LineDesc> 
      <Line> 
       <LineId> 
       <LineName> 
       <LineDesc> 
      </Line> 
     </Line> 
    </Line> 
    <Line> 
     <LineId> 
     <LineName> 
     <LineDesc> 
     <Line> 
      <LineId> 
      <LineName> 
      <LineDesc> 
     </Line> 
    </Line> 
</OrderOutput> 

私はこれを解決するために手伝ってください。

+1

を変換しながら、要素名に置き換える使用することができますか? –

+0

申し訳ありません..私はそれを見逃しました。仮定してください –

答えて

1

あなたは `出力にOrderLine`から来ないことと、なぜそれが閉じられていない

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="2.0"> 
    <xsl:output indent="yes"/> 

    <xsl:template match="OrderInput"> 
     <OrderOutput> 
      <xsl:apply-templates/> 
     </OrderOutput> 
    </xsl:template> 

    <xsl:template match="*[starts-with(name(.), 'Item')]"> 
     <xsl:element name="{replace(name(.), '^Item', 'Line')}"> 
      <xsl:apply-templates/> 
     </xsl:element> 
    </xsl:template> 
</xsl:stylesheet> 
+0

こんにちはルペッシュ。早急な返信ありがとうございます...私の要件は文字列の置換ではありません...私は出力形式を与えた単なる説明目的のためです。 –

+0

@VamsiKrishnaの場合、出力に影響を与えないよりも、ドキュメントのマッピングを変更しないと、要素を要素のネストのために要素マッピングに単純に変換できます。上記のコードの最初のテンプレートと同じです。 – Rupesh

関連する問題