2010-12-30 5 views
0

J'ai vu quelques réponses au problème que j'ai maintenant mais le mien est celui d'un imbriqué.namespaces dans les éléments xml imbriqués

J'ai un xml qui ressemble à ceci:

> 
<em> 
<type xmlns="http://www.sitcom-project.org/sitcom" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <model> 
    <implemented_with>comoco</implemented_with> 
    <implemented_in>perl</implemented_in> 
    <cash_flow>casual</cash_flow> 
    <interaction>conventional</interaction> 
    </model> 
</type> 
</em> 

maintenant, comment accéder à l'élément i du noeud implemented_with? Ofc je pouvais accéder à la xmlList de cette manière: namespace ns = www.sitcom-project.org/sitcom; type.ns :: modèle; mais maintenant, comment accéder au noeud implement_with dans le modèle xmlList? J'ai essayé type.ns :: model.implemented_with, mais cela n'a pas fonctionné. Quelqu'un a une idée? merci

Répondre

1

Il existe plusieurs façons de procéder, mais la meilleure solution consiste à utiliser un préfixe d'espace de nom avant chaque accès point. Dans votre cas, la première chose que vous voulez faire est d'isoler l'espace de noms. Vous pouvez le faire en codant en dur l'espace de noms dans un nouvel objet d'espace de nommage ... ie;

var ns:Namespace = new Namespace("http://www.sitcom-project.org/sitcom"); 

Ou une meilleure façon est de simplement l'extraire du noeud approprié. Dans le code suivant, j'obtiens tous les espaces de noms (en tant que tableau) déclarés sur le noeud de type, et je cible juste le premier dans la liste. Parce que je ne connais pas l'espace de noms à l'avance, je dois le récupérer en utilisant la méthode children(). Une fois que vous avez accompli cela, vous pouvez utiliser la syntaxe de l'espace de noms pour creuser dans votre modèle. Cela peut être un peu détaillé, vous pouvez donc définir l'espace de noms par défaut en utilisant la syntaxe suivante. Je n'aime pas ça personnellement, mais ça marche.

default xml namespace = ns; 
var impWith:String = typeRoot.model.implemented_with; 
default xml namespace = null; 

Une simple doublure pourrait être.

var ns:Namespace = new Namespace("http://www.sitcom-project.org/sitcom"); 
var imp:String = _yourXML.em[0].ns::type.ns::model.ns::implemented_with; 

En utilisant la syntaxe par défaut

default xml namespace = new Namespace("http://www.sitcom-project.org/sitcom"); 
var imp:String = _yourXML.em[0].type.model.implemented_with; 
default xml namespace = null; 

Hope this helps.

+0

ActionScript a une capture avec 'namespace xml par défaut'. Lorsque vous avez terminé avec, vous devez le réinitialiser pour vide l'espace de noms, ou des erreurs d'exécution peuvent se produire. – alxx

+0

Édité ma réponse pour refléter votre commentaire – Nicholas

Questions connexes