Question

J'ai le code XML suivant -

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

Ce que je veux faire est de boucler chacune des lignes d'une certaine ligne.

J'ai essayé de le faire pour obtenir tous les identifiants attr mais j'ai également les identifiants de valeurs.

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

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

Je voudrais aussi noter que l'objectif principal est de boucler chaque attr et ensuite de boucler chaque valeur alors que j'ai l'identifiant de l'attr.

P.S si vous pensez à un moyen plus simple / plus simple de le faire avec une autre bibliothèque, je suis ouvert à toutes suggestions.

Merci d'avance,

Était-ce utile?

La solution

Je ne vois pas très bien ce que vous essayez de faire, je pense que l'une des balises de votre question a été déformée. Vous dites: "Ce que je veux faire, c'est boucler chacune des lignes d'une certaine ligne." et je pense que vous aviez une étiquette là-bas.

Quoi qu'il en soit, voici quelques exemples d'extraction de données du document XML analysé à l'aide de jQuery. Les commentaires montrent ce qui sera alerté.

Je pense qu'une partie du problème est que vous avez les valeurs id en tant que frères et sœurs plutôt que des enfants pour les attributs. Il semble qu'une structure plus cohérente pourrait être:

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

Mais si vous n'avez pas le contrôle sur le xml, veuillez ignorer cette suggestion. : -)

D'accord, voici quelques exemples de parcours pour obtenir différentes données:

D'abord, récupérons simplement "Item1"

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

Maintenant, nous aurons le 1 et le 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>

Enfin, retirons les principaux identifiants d'attr et lions-les aux valeurs suivantes:

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

Autres conseils

Cela devrait fonctionner pour vous

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

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

PS. Vous pouvez utiliser xpath :

.
var ids = document.evaluate( '//rows/row[@id='+id + ']/attr/id/text( )', theXmlDoc, null, XPathResult.ANY_TYPE, null );
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top