Vra

Ek het die volgende 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>

Wat ek wil doen, is om lus elk van die van 'n sekere ry.

Ek het probeer om dit te doen ten einde al die attr ids te kry, maar ek het ook die waardes ids.

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

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

Ek sou ook graag om daarop te let dat hoofdoel is lus elke attr en daarna na lus elke waarde solank as ek daar id die attr se.

post scriptum as jy dink aan 'n makliker / eenvoudiger manier om dit te doen met 'n paar ander biblioteek Ek is oop vir voorstelle.

Dankie by voorbaat,

Was dit nuttig?

Oplossing

Ek is nie duidelik wat jy probeer is om lus oor, ek dink een van die tags in jou vraag is deurmekaar. Jy sê: "Wat ek wil doen, is om lus elk van die van 'n sekere ry." en ek dink jy 'n merker in daar het.

In elk geval, hier is 'n paar voorbeelde van onttrekking van data uit die Geperste xml dokument met behulp van jQuery. Die kommentaar te wys wat sal gewaarsku word.

Ek dink deel van die probleem is dat jy die ID-waardes as broers en susters eerder as kinders na die eienskappe. Dit lyk asof 'n meer samehangende struktuur kan wees:

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

Maar as jy nie beheer oor die xml het, ignoreer asseblief hierdie voorstel. : -)

Goed, hier is 'n paar voorbeelde van traversal om verskillende stukke van data te kry:

Eerste laat ons net kry "punt1"

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

Nou sal ons kry die 1 en 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>

En laastens, laat ons trek uit die hoof attr ids en bind hulle in die waardes:

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

Ander wenke

Dit moet work for you

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

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

PS. Jy kan gebruik XPath óf:

var ids = document.evaluate( '//rows/row[@id='+id + ']/attr/id/text( )', theXmlDoc, null, XPathResult.ANY_TYPE, null );
Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top