2010-01-19 4 views
1

J'ai une référence à un nœud XML qui fait partie d'un arbre XML plus grand. Existe-t-il un moyen d'obtenir ces éléments de la fratrie suivante/précédente sans accéder au parent et de le rechercher? Quelque chose comme DOM nextSibling serait ce que je cherche.E4X obtient le prochain frère de l'élément

modifier: Étant donné qu'il n'y a aucun moyen naturel de le faire avec E4X, je vais en tenir à ce qui suit (sauf que dans mon cas, je vais stocker l'index réel quelque part au lieu):

// next sibling: 
node.parent().children()[ node.childIndex() + 1 ] 
// previous sibling: 
node.parent().children()[ node.childIndex() - 1 ] 

Répondre

1

Je ne vois pas de telles méthodes dans ECMA-357, 2e édition. De plus, "frère" ne semble pas apparaître nulle part dans ma copie de la norme. Si de telles méthodes existent, elles existent car Adobe les a ajoutées en tant qu'extensions à la spécification.

+0

Dommage. Je suppose que je vais devoir stocker l'index de mon noeud puis quelque part pour le parcourir efficacement. Merci d'avoir cherché dans la norme :) – poke

+1

Pour être juste, le DOM lui-même est algorithmiquement inefficace. Notez comment deux méthodes différentes d'accès aux éléments enfants existent dans le DOM du W3C, pour un accès égal à un frère et à un index. La prise en charge vous donne soit un accès rapide aux éléments (parent, parent, premier enfant, dernier enfant, par exemple, index avec parent et un tableau d'enfants) avec certains idiomes. Soutenir les deux signifie que vous accélérez inévitablement un idiome et parfois (astuces modulo) ralentir l'autre. E4X prenant en charge uniquement l'accès indexé évite ce problème (au prix de nécessiter des algorithmes basés sur des index). –

0
+0

Pas vraiment, car je ne peux pas convertir un objet XML en XMLNode. (http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/XML.html) – poke

+0

Bien sûr, vous pouvez: new XMLDocument (xml.toString()); –

+0

Assez juste: P - Mais je doute que ce soit assez efficace pour justifier d'avoir une arborescence XML E4X * et * une arborescence DOM. – poke