jQuery XML-Analyse/Traversing

Ich habe die folgende 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>

Was ich tun möchte, ist, jede der einer bestimmten Zeile zu schleifen.

Ich habe versucht, dies zu tun, um alle attr iDs zu bekommen, aber ich habe auch die Werte-IDs.

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

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

Ich möchte auch darauf hinweisen, dass das Hauptziel ist, jeden attr und danach jeden Wert zu schleifen, während ich die attr-ID habe.

P.S, wenn Sie an eine einfachere/einfachere Möglichkeit denken, dies mit einer anderen Bibliothek zu tun, bin ich offen für Vorschläge.

Danke im Voraus,

Antwort auf "jQuery XML-Analyse/Traversing " 2 von antworten

Dies sollte für Sie

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

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

PS funktionieren. Sie können entweder xpath either: verwenden:

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

Ich bin mir nicht klar, was du zu überdrehen versuchst, ich denke, eines der Tags in deiner Frage war verstümmelt. Sie sagen: "Was ich tun möchte, ist, jede der einer bestimmten Reihe zu schleifen." und ich denke, Sie hatten einen Tag drin.

Wie auch immer, hier sind einige Beispiele für das Extrahieren von Daten aus dem analysierten XML-Dokument mit jQuery. Die Kommentare zeigen, was gewarnt wird.

Ich denke, ein Teil des Problems ist, dass Sie die ID-Werte als Geschwister und nicht als Kinder zu den Attributen haben. Es scheint, als ob eine kohärentere Struktur sein könnte:

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

Aber wenn Sie keine Kontrolle über die XML haben, ignorieren Sie bitte diesen Vorschlag. :-)

Okay, hier sind einige Beispiele von Traversen, um verschiedene Daten zu erhalten:

Zuerst lassen Sie uns einfach "Item1"

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

Jetzt bekommen wir die 1 und die 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>

Und schließlich ziehen wir die Haupt-Attr-IDs heraus und binden sie in die Werte:

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