2009-06-20 29 views
16

Tôi đã sau XML-jQuery XML Parsing/Vượt qua

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

Những gì tôi muốn làm là để lặp mỗi của một hàng nhất định.

Tôi đã cố gắng thực hiện việc này để có được tất cả các id attr nhưng tôi cũng có id giá trị.

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

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

Tôi cũng muốn lưu ý rằng mục tiêu chính là lặp mỗi attr và sau đó lặp lại từng giá trị trong khi tôi có id của attr.

P.S nếu bạn nghĩ cách dễ dàng/đơn giản hơn để làm như vậy với một số thư viện khác tôi đang mở để có đề xuất.

Cảm ơn trước,

+0

Chỉ gặp vấn đề tương tự gần như vậy. +1 –

Trả lời

14

Tôi không rõ ràng những gì bạn đang cố gắng để lặp qua, tôi nghĩ rằng một trong các thẻ trong câu hỏi của bạn đã bị cắt xén. Bạn nói: "Điều tôi muốn làm là lặp lại từng hàng của một hàng nhất định." và tôi nghĩ bạn có một thẻ ở đó.

Dù sao, đây là một số ví dụ về trích xuất dữ liệu từ tài liệu xml được phân tích cú pháp bằng jQuery. Các ý kiến ​​cho thấy những gì sẽ được cảnh báo.

Tôi nghĩ rằng một phần của vấn đề là bạn có các giá trị id như anh chị em hơn là trẻ em vào các thuộc tính. Dường như cấu trúc mạch lạc hơn có thể là:

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

Nhưng nếu bạn không kiểm soát được xml, vui lòng bỏ qua đề xuất đó. :-)

OK, đây là một số mẫu traversal để thu được các mảnh dữ liệu khác nhau:

Đầu tiên chúng ta hãy chỉ nhận được "Item1"

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

Bây giờ chúng ta sẽ nhận được 1 và 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> 

và cuối cùng, chúng ta hãy kéo ra id attr chính và buộc chúng vào các giá trị:

<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

Về cơ bản những gì tôi muốn lặp lại là attrs, và cho mỗi attr tôi cần phải lấy mỗi giá trị của mình, và ngoài lấy attr của id, tôi không thể thay đổi xml vì vậy tôi cần một giải pháp cho điều đó. Tôi sẽ thử mã của bạn vào ngày mai khi tôi có trạm làm việc, cảm ơn bạn. –

1

này nên làm việc cho bạn

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

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

PS. Bạn có thể sử dụng một trong hai xpath:

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

Nó không hoạt động. –

+0

Đã chỉnh sửa. Xin lỗi, tôi không thể kiểm tra ở đây. –

Các vấn đề liên quan