2009-08-03 3 views
2

Je n'arrive pas à accéder à un seul élément XML portant le même nom que les autres éléments (dans ce cas, le tag «nom»). Comment puis-je accéder uniquement au "wantedName" ci-dessous en utilisant jQuery?Accès à un seul élément ayant un nom partagé dans un DOM XML à l'aide de jquery

<sample> 
<input> 
    <value>0.2</value> 
    <name>varName</name> 
</input> 
<name>wantedName</name> 
<output> 
    <value>4</value> 
    <name>varName2</name> 
</output> 
</sample> 

Utilisation $ (xml) .Find ("name") retourne un tableau contenant [nomVar, wantedName, varName2]. Malheureusement, je ne peux pas simplement accéder au 1er index parce que le xml est dynamique, donc je ne suis pas sûr à quel index le "wantedName" sera. Je voudrais accéder à "wantedName" en faisant quelque chose comme "si cela a un parent immédiat nommé <sample>, l'obtenir, sinon ignorer".

Répondre

1

En supposant que la structure du xml ressemble toujours à l'exemple donné (où nom est directement après la balise d'entrée), je pense que cela pourrait fonctionner

$(xml).find("input + name"); 
+0

fantastique! c'était le seul qui fonctionnait. merci beaucoup T B – neptune

0

On peut supposer que vous voulez récupérer les name balises qui sont des enfants de sample, mais pas ceux qui sont des enfants de input ou un autre tag?

Si oui, cela devrait fonctionner:

$(xml).find("sample > name");

+0

C'était ma première réponse et comme redsquare l'a fait remarquer, cela ne fonctionnera pas puisque sample est la racine du document xml. Collez ce dans Firebug et vous verrez que le savoir élément est retourné: var $ xml = $ (" 0,2 nomVar wantedName varName2"); $ xml.find ("nom de l'échantillon"); –

0

$(xml).find("input > name").text() devrait fonctionner très bien, en supposant que vous travaillez avec xml dans le cadre du Royaume, et non pas seulement une chaîne. C'est parce que 'input' est un nom de tag en html.

Si vous travaillez avec une chaîne, voici un parseXml function I found quickly, et testé en FF 3. Donc, parser votre chaîne, puis la traverser via jquery.

function parseXML(xml) { 
    if (window.ActiveXObject && window.GetObject) { 
     var dom = new ActiveXObject('Microsoft.XMLDOM'); 
     dom.loadXML(xml); 
     return dom; 
    } 
    if (window.DOMParser) 
     return new DOMParser().parseFromString(xml, 'text/xml'); 
    throw new Error('No XML parser available'); 
} 

Modifier

Cela permettra également travailler sans analyse syntaxique comme xml, en supposant que votre xml ne change pas.

$(xml).find("name:first").text(); 
+0

$ (xml) .find ("name: first"). Text() a renvoyé "varName" et votre première solution ($ (xml) .find ("input> name"). Text() retourné indéfini :( – neptune

+0

Oups, je pensais que vous vouliez le 'nom' sous l'élément input.Le premier exemple devait être analysé en tant que xml en premier. – ScottE

Questions connexes