2012-01-01 22 views
1

id属性に基づいて特定の部分を抽出する必要があるXMLファイルがあります。XMLから特定の部分を抽出する方法

入力XML

<root> 
<item id="id_1" state="closed"> 
    <content> 
     <name>Details</name> 
    </content> 
    <item state="closed" id="id_1_1"> 
     <content> 
      <name title="Name">Identity</name> 
     </content> 
     <item id="id_1_1_1" state="closed"> 
      <content> 
       <name title="Name">Name</name> 
      </content> 
      <item id="id_1_1_1_1"> 
       <content> 
        <name title="First Name">First Name</name> 
       </content> 
      </item> 
      <item id="id_1_1_1_2"> 
       <content> 
        <name title="Last Name">Last Name</name> 
       </content> 
      </item> 
     </item> 
     <item id="id_1_1_2" state="closed"> 
      <content> 
       <name title="Address">Address</name> 
      </content> 
      <item id="id_1_1_2_1"> 
       <content> 
        <name title="Address Line 1">Line 1</name> 
       </content> 
      </item> 
      <item id="id_1_1_2_2"> 
       <content> 
        <name title="Address Line 2">Line 2</name> 
       </content> 
      </item> 
      <item id="id_1_1_2_3"> 
       <content> 
        <name title="City">City</name> 
       </content> 
      </item> 
     </item> 
    </item> 
<item> 
</root> 

私は、入力としてid_1_1与えた場合、私の出力XMLは、(

<item id="id_1_1_1" state="closed"> 
    <content> 
     <name title="Name">Name</name> 
    </content> 
</item> 
<item id="id_1_1_2" state="closed"> 
    <content> 
     <name title="Address">Address</name> 
    </content> 
</item> 

出力は、選択したノードの直下のアイテムを取る必要があり、出力

以下のようにする必要があります入力IDの)、深さはそれ以上ありません。

+0

'name'はすでに' item'より2レベル深いですが、それでもそれを含めることができます。おそらく、あなたは入れ子にされた 'item'sを含めることを意味するのでしょうか? –

+0

これはどのような宿題ですか? –

+0

ネストされたアイテムではなく内容と名前を含めることができます。 FYI、jqueryを学ぶ、これはXMLデータを入力として受け取るjstreeプラグインを使用してツリーを生成するためのものです。 – rohit

答えて

1

この変換

<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:template match="text()"/> 

<xsl:template match="item[@id='id_1_1']/item"> 
    <xsl:copy> 
    <xsl:copy-of select="@*"/> 
    <xsl:copy-of select="content"/> 
    </xsl:copy> 
</xsl:template> 
</xsl:stylesheet> 

提供XMLに適用される(少し整形行われるように修正!):

<root> 
    <item id="id_1" state="closed"> 
     <content> 
      <name>Details</name> 
     </content> 
     <item state="closed" id="id_1_1"> 
      <content> 
       <name title="Name">Identity</name> 
      </content> 
      <item id="id_1_1_1" state="closed"> 
       <content> 
        <name title="Name">Name</name> 
       </content> 
       <item id="id_1_1_1_1"> 
        <content> 
         <name title="First Name">First Name</name> 
        </content> 
       </item> 
       <item id="id_1_1_1_2"> 
        <content> 
         <name title="Last Name">Last Name</name> 
        </content> 
       </item> 
      </item> 
      <item id="id_1_1_2" state="closed"> 
       <content> 
        <name title="Address">Address</name> 
       </content> 
       <item id="id_1_1_2_1"> 
        <content> 
         <name title="Address Line 1">Line 1</name> 
        </content> 
       </item> 
       <item id="id_1_1_2_2"> 
        <content> 
         <name title="Address Line 2">Line 2</name> 
        </content> 
       </item> 
       <item id="id_1_1_2_3"> 
        <content> 
         <name title="City">City</name> 
        </content> 
       </item> 
      </item> 
     </item> 
    </item> 
</root> 

は指名手配、正しい結果を生成します

<item id="id_1_1_1" state="closed"> 
    <content> 
     <name title="Name">Name</name> 
    </content> 
</item> 
<item id="id_1_1_2" state="closed"> 
    <content> 
     <name title="Address">Address</name> 
    </content> 
</item> 
0

このXPathの:

//item[@id="id_1_1"]/item/content/name 

は一致id属性値を持つ任意のレベルでitem要素の直接の子項目のためだけにあるすべてのnameの要素を選択します。

編集:あなたはitem要素をしたい場合は、

//item[@id="id_1_1"]/item 

を使用して、反復中にそれらの直接の子を選択するために

./content/name 

を使用しています。

また、jQueryに言及するフォローアップのコメントを追加したので、"attribute equals selector"は属性名に@シンボルを使用せず、完全なXPath構文も使用しないことに注意してください。

+0

ネストされたアイテムではなく、即時アイテム(コンテンツと名前付き)のみを選択したいと考えています。 – rohit

+0

「即時の商品」とは何ですか?私が提供したXPathが、あなたが要求した出力に関連する唯一のデータを与えるように見えます。それにもかかわらず、私はおそらくもっと多くの情報について私の答えを編集しました。 – Phrogz

関連する問題