2009-06-20 28 views
16

を横断私は私が何をしたいのか、次のXML-jQueryのXML解析/

<rows> 
    <row id="5"> 
     <cell>Item1</cell> 
    <attrs> 
    <attr> 
     <id>1</id> 
     <type>CheckBox</type> 
     <values> 
     <value> 
      <id>10</id> 
     </value> 
     <value> 
      <id>11</id> 
     </value> 
     </values> 
    </attr> 
    <attr> 
     <id>2</id> 
     <type>CheckBox</type> 
     <values> 
     <value> 
      <id>20</id> 
     </value> 
     <value> 
      <id>21</id> 
     </value> 
     </values> 
    </attr> 
    </attrs> 
    </row> 
</rows> 

を持つループ特定の行のそれぞれにあります。

すべてのattr IDを取得するためにこれを実行しようとしましたが、値IDも取得しました。

function fillForm(id){ 
    var theRow = $(theXmlDoc).find('row[id='+id+']').get() 

    $(theRow).find("attr").each(function(i) 
    { 
     alert($(this).find("id").text()); 
    }); 
} 

また、私はATTRのIDを持っていながら、主な目的は、それぞれのattr、その後ループにそれぞれの値のループであることに注意したいと思います。

P.他のライブラリでもっと簡単で簡単な方法を考えてみたら、私は提案があります。事前に

おかげで、

+0

ちょうどこの全く同じ問題を抱えていた。 +1 –

答えて

14

私はあなたが上のループにしようとしているものをクリアしていないよ、私はあなたの質問内のタグのいずれかが文字化けしたと思う:あなたはxpathのいずれかを使用することができます。あなたは言う: "私がしたいのは、ある行のそれぞれをループすることです。"あなたはそこにタグがあると思う。

とにかく、jQueryを使用して解析されたxmlドキュメントからデータを抽出する例がいくつかあります。コメントには、警告が表示されます。

私は問題の一部は、属性の子ではなく兄弟としてのID値を持っていることだと思います。

<rows> 
    <row id="5"> 
     <cell>Item1</cell> 
     <attrs> 
      <attr id="1"> 
       <type>CheckBox</type> 
       <values> 
        <value> 
         <id>10</id> 
        </value> 
        <value> 
         <id>11</id> 
        </value> 
       </values> 
      </attr> 
      <attr id="2"> 
       <type>CheckBox</type> 
       <values> 
        <value> 
         <id>20</id> 
        </value> 
        <value> 
         <id>21</id> 
        </value> 
       </values> 
      </attr> 
     </attrs> 
    </row> 
</rows> 

しかし、あなたがxmlを制御できない場合は、その提案を無視してください。

まず今は1と2を買ってあげるのがちょうど

<script type="text/javascript"> 
// Item1 
$.get('sample.xml', null, function (data, textStatus) { 
    alert($(data).find('rows row[id=5] cell').text()); 
}, 'xml'); 
</script> 

を「アイテム1」を取得してみましょう::-)

さて、ここでの各種データを取得するためのトラバーサルのいくつかのサンプルがあります:

<script type="text/javascript"> 
// 1 
// 2 
$.get('sample.xml', null, function (data, textStatus) { 
    $(data).find('rows row[id=5] attrs attr > id').each(function(){ 
      alert($(this).text()); // 1, 2 
    }); 
}, 'xml'); 
</script> 

そして最後に、のは、メインのattrのIDを引き出してみましょうとの値にそれらを結ぶ:

<script type="text/javascript"> 
// rows row[id=5] attrs attr > id 1 has inner ids of 10,11 
// rows row[id=5] attrs attr > id 2 has inner ids of 20,21 
$.get('sample.xml', null, function (data, textStatus) { 

     var out = '' 
     $(data).find('rows row[id=5] attrs attr > id').each(function(){ 
       out += 'rows row[id=5] attrs attr > id ' + $(this).text(); 
       var innerIds = []; 
       $(this).siblings('values').find('value id').each(function(){ 
        innerIds.push($(this).text()) 
       }); 
       out += ' has inner Ids of ' + innerIds.join(',') + '\n'; 
     }); 
     alert(out); 
    }, 'xml'); 
</script> 
+0

基本的には私がループしたいのはattrsです。attrごとに値を取得する必要があります。attrのidを取得するだけでなく、xmlを変更することもできませんので、解決策が必要です。 明日は私のワークステーションを持っているときにコードを試してみるよ、ありがとう。 –

1

これはあなた

function fillForm(id){ 
    var row = $(theXmlDoc).find('row#+'+ id); 
    var ids = row.find("attr > id"); 

    ids.each(function(i) 
    { 
     alert($(this).text()); 
    }); 
} 

PSのために働く必要があります。

var ids = document.evaluate('//rows/row[@id='+id + ']/attr/id/text()', theXmlDoc, null, XPathResult.ANY_TYPE, null); 
+0

動作しません。 –

+0

編集されました。申し訳ありませんが、私はここでそれをテストすることはできません。 –