2009-06-20 16 views
16

Mam następujący XML-jQuery analizowania XML/Ruch

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

Co chcę zrobić jest do pętli każdego z pewnego rzędu.

Próbowałem to zrobić, aby uzyskać wszystkie atridy, ale otrzymałem również wartości identyfikatorów.

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

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

Chciałbym również zauważyć, że głównym celem jest pętla każdy attr, a potem do pętli każda wartość natomiast mam id atr za.

P.S jeśli myślisz o łatwiejszym/prostszym sposobie zrobienia tego w innej bibliotece, jestem otwarty na sugestie.

Dzięki z góry,

+0

Wystąpił prawie dokładnie ten sam problem. +1 –

Odpowiedz

14

nie jestem jasne, co starasz się nad pętlą, myślę, że jednym z wyróżników w swoim pytaniu zostało zniekształcone. Mówisz: "Chcę zrobić pętlę dla każdego z określonego wiersza". i myślę, że masz tam tag.

Oto przykłady ekstrakcji danych z przeanalizowanego dokumentu XML przy użyciu jQuery. Komentarze pokazują, co zostanie ostrzeżone.

Myślę, że część problemu polega na tym, że masz wartości identyfikatora jako rodzeństwo, a nie dzieci, do atrybutów. Wygląda na to, że bardziej spójna struktura może być:

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

Ale jeśli nie masz kontroli nad xml, zignoruj ​​tę sugestię. :-)

Ok, oto kilka próbek przechodzenie aby uzyskać różne kawałki danych:

Zacznijmy po prostu „Pozycja1”

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

Teraz dostajemy 1 i 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> 

i wreszcie, niech wyciągnąć główne identyfikatory attr i związać je do wartości:

<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

W zasadzie to, co chcę przełączyć na pętlę, to attrs, i dla każdego atra muszę pobrać każdą z jego wartości, a oprócz pobrania identyfikatora attr, nie mogę zmienić xml, więc potrzebuję rozwiązania. Spróbuję twojego kodu jutro, kiedy będę miał swoją stację roboczą, dziękuję. –

1

ten powinien pracować dla Ciebie

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

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

PS. Można użyć xpath albo:

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

To nie działa. –

+0

Edytowane. Niestety, nie mogę tego przetestować tutaj. –

Powiązane problemy