2010-08-16 4 views
1

Dans un projet sur lequel je travaille, je viens de terminer l'écriture d'un XSD pour mon XML afin que d'autres ingénieurs puissent travailler sur le XML plus facilement. Avec ce XSD sont venus les espaces de noms XML. Dans mon code d'analyse syntaxique actuel, je l'ai utilisé quelque chose comme ceci:Solution élégante pour analyser XElements dans un espace de noms

XElement element = xmlRoot.Element(XML.ELEMENT_NAME); 

Avec XML étant une classe complète de constantes qui est utilisé tout au long du programme pour l'entrée et la sortie XML. Mais, maintenant que les espaces de noms sont utilisés, cela ne fonctionne plus. L'évidente, mais à peine élégante, la solution est d'aller et faire tout le look de code d'analyse syntaxique comme ceci:

XElement element = xmlRoot.Element(XML.NAMESPACE + XML.ELEMENT_NAME); 

En pensant à plus, il ressemblerait beaucoup mieux de partir et de définir une méthode d'extension ajoutez dans cet espace de noms et renvoyez le XElement. Cette idée d'obtenir le code à la recherche quelque chose comme ceci:

XElement element = xmlRoot.GetMyElement(XML.ELEMENT_NAME); 

Ces idées sont ce que je suis venu avec à ce jour pour traiter la question de l'espace de noms. Fondamentalement, ma question ici est la suivante:
Existe-t-il une meilleure méthode pour analyser XElements avec un espace de nom constant connu? Si oui, qu'est-ce que c'est?

Répondre

2

Eh bien, personne n'a fourni d'alternative, et j'ai déjà implémenté cela dans le code. Donc, je vais aller de l'avant et mettre ceci en réponse afin que je puisse fermer ceci. Je suis allé de l'avant et j'ai utilisé la méthode d'extension ajoutée automatiquement dans l'espace de noms. Notez que ceci ne fonctionne que si vous avez un espace de noms constant! Sinon, vous pouvez ajouter un autre argument à votre méthode d'extension simplement pour éviter la concaténation bizarre d'espace de noms.

 public static XElement 
     GetNamespaceElement(this XElement element, string ns, string name) 
     { 
      XNamespace n = new XNamespace(); 
      n.NamespaceName = ns; 
      return element.Element(n + name); 
     } 
Questions connexes