Frage

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 soll ich tun, um eine Schleife ist jeder der einer bestimmten Zeile.

Ich habe versucht, dies zu tun, um alle der 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 Hauptziel Schleife jede attr und danach in einer Schleife ist jeder Wert, während ich die attr ids haben.

Ich bin offen für Anregungen

P. S, wenn Sie denken an eine einfachere / einfachere Art und Weise so mit einer anderen Bibliothek zu tun.

Vielen Dank im Voraus,

War es hilfreich?

Lösung

Ich bin mir nicht klar, was Sie Schleife sind versucht, über, ich denke, eine der Tags in Ihrer Frage verstümmelt wurde. Sie sagen: „Was ich tun möchte, ist jeder der eine bestimmte Zeile zu Schleife.“ und ich denke, Sie dort einen Tag haben.

Wie auch immer, hier einige Beispiele von Daten aus dem analysierten XML-Dokument mit jQuery zu extrahieren. Die Kommentare zeigen, was aufmerksam gemacht werden.

Ich denke, ein Teil des Problems ist, dass Sie die ID-Werte als Geschwister eher als Kinder auf die Attribute haben. Es scheint wie eine kohärentere Struktur könnte sein:

<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 diesen Vorschlag. : -)

Okay, hier sind einige Beispiele von Traversal zu verschiedenen Daten zu erhalten:

Lassen Sie uns zunächst nur bekommen "Element1"

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

Jetzt werden wir erhalten 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 wollen wir die wichtigsten attr ids herausziehen und sie in die Werte binden:

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

Andere Tipps

Dies sollte für Sie arbeiten

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

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

PS. Sie können verwenden XPath entweder:

var ids = document.evaluate( '//rows/row[@id='+id + ']/attr/id/text( )', theXmlDoc, null, XPathResult.ANY_TYPE, null );
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top