2009-06-20 162 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事後循環每個值,而我有ATTR的ID。

P.S如果你想到一個更容易/更簡單的方式來做到這一點與其他圖書館,我願意提出建議。

由於提前,

+0

剛剛有幾乎完全相同的問題。 +1 – 2010-05-12 23:19:10

回答

14

我不清楚你在想什麼循環,我覺得你的問題的標籤之一是亂碼。你說:「我想要做的是循環每一行的某一行。」我想你在那裏有一個標籤。

無論如何,下面是一些使用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」

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

現在,我們將得到1和2 :

<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> 
1

這應該

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

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

你PS工作。您可以使用xpath之一:

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

它不起作用。 – 2009-06-20 17:47:40

+0

已編輯。對不起,我無法在這裏測試。 – 2009-06-20 18:02:51