2010-09-24 33 views
1

Je veux être en mesure de faire quelque chose commeflash AS3: L'utilisation de "chaîne" pour passer en E4X XML requête

var XMLquery:String = "a1.a2.a3"; 
var parserVal:XML = parserMethod(XMLquery); 
// or 
var parserVal:XMLList = parserMethod(XMLquery);` 

et obtenir une chose sortie comme

<a3>Some value</a3> 

Important: Et Je veux être en mesure de remplacer la sortie à a1.a2.a3 donc en utilisant descendants est hors de question. :(

Il est donc essentiellement la possibilité d'appeler la requête xml dans la chaîne. Est-il possible de le faire. Un soupçon serait super, je peux le faire si je suis un peu de démarrage de la tête.

Merci


Je pense avoir trouvé une solution à l'aide de ce lien:

Updating an actionscript xml object directly in one line using e4x?

public static function updateXml(xml:XML, path:String, data:XMLList = null,update:Boolean = false,XmlListOnly:Boolean = false):* { 
      var nodesArray:Array = path.split("."); 
      var tempXML:XML = xml; 
      var tempXMLCandidate:XML; 
      var tagName:String; 
      for (var i:int = 0; i < nodesArray.length; i++){ 
       tagName = nodesArray[i]; 
       if (i == nodesArray.length - 1){ 
        if (data != null && update && !XmlListOnly){ 
        tempXML[tagName] = data; 
        }else if (XmlListOnly){ 
         return tempXML[tagName]; 
        }else{ 
        return tempXML[tagName].length(); 
        } 
       }else{ 
        tempXMLCandidate = tempXML[tagName][0]; 
        if (!tempXMLCandidate){ 
         tempXML.appendChild(tempXMLCandidate); 
        } 
       tempXML = tempXMLCandidate; 
       } 
      } 
      return tempXML; 
     } 

Vous pouvez l'appeler comme ceci:

updateXml(xmlHold, "words.exercise", sortedXmlList, true); 

Répondre

3

Je suis trop paresseux pour le code et de le tester, mais voici idée:

  • cassez votre requête sur les pièces "a1.a2.a3".split(".")
  • Aller sur les pièces, en appelant xml.elements(parts[i]) (vous aurez besoin de la fonction supplémentaire (peut-être imbriquée) pour les appels récursifs)
  • Si vous obtenez non-vide y XMLList, répétez l'appel elements sur cette liste en utilisant la partie suivante.
  • Sur la dernière partie, extrayez le texte avec children()[0].
+0

Ouais! J'ai fait à peu près la même chose que vous avez suggéré. Mais tordu le code un peu pour correspondre à mon besoin. J'ai posté le code ci-dessus, je n'ai pas le temps de le vérifier correctement. Merci pour votre aide alxx! J'apprécie beaucoup. –

+0

Si la réponse vous aide, n'hésitez pas à l'accepter ... Vous obtenez quelque chose :) – alxx