Question

Dans un projet sur lequel je travaille, je viens de finir d'écrire un XSD pour mon XML pour que d'autres ingénieurs pourraient travailler sur le XML plus facile. Avec cette XSD est venu XML namespaces. Dans mon code d'analyse syntaxique actuel, je l'ai utilisé quelque chose comme ceci:

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. La solution évidente, mais à peine élégante, 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 y repensant plus, il ressemblerait beaucoup mieux de partir et de définir une méthode d'extension pour ajouter dans cet espace de noms et de retourner 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. Au fond, ma question ici est la suivante:
Y at-il une meilleure méthode pour l'analyse syntaxique XElements avec un connu, espace de noms constante? Si oui, quel est-il?

Était-ce utile?

La solution

Eh bien, personne n'a fourni une solution de rechange, et je l'ai déjà mis en oeuvre dans le code. Alors, je vais aller de l'avant et mettre cela en guise de réponse que je puisse fermer cela.

je suis allé de l'avant et a utilisé la méthode d'extension qui ajoute automatiquement dans l'espace de noms. Notez que cela ne fonctionne que si vous avez un espace de noms de constante! Dans le cas contraire, vous pouvez ajouter un autre argument à votre méthode d'extension simplement pour éviter de faire la concaténation d'espace de nom bizarre.

      public static XElement
      GetNamespaceElement(this XElement element, string ns, string name)
      {
          XNamespace n = new XNamespace();
          n.NamespaceName = ns;
          return element.Element(n + name);
      }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top