Les espaces de noms XElement (comment faire?)

Comment créer un document XML avec un préfixe de noeud tel que:

      

Quand j’essaye de lancer quelque chose comme un new XElement("sphinx:docset") une exception

Exception non gérée: System.Xml.XmlException: le caractère ‘:’, valeur hexadécimale 0x3A, ne peut pas être inclus dans un nom.
à System.Xml.XmlConvert.VerifyNCName (nom de la chaîne, exceptionType exceptionTyp e)
à System.Xml.Linq.XName..ctor (XNamespace ns, Ssortingng localName)
à System.Xml.Linq.XNamespace.GetName (Ssortingng localName)
à System.Xml.Linq.XName.Get (Ssortingng ExpandName)

C’est vraiment facile dans LINQ to XML:

 XNamespace ns = "sphinx"; XElement element = new XElement(ns + "docset"); 

Ou pour que le “alias” fonctionne correctement pour le faire ressembler à vos exemples, quelque chose comme ceci:

 XNamespace ns = "http://url/for/sphinx"; XElement element = new XElement("container", new XAtsortingbute(XNamespace.Xmlns + "sphinx", ns), new XElement(ns + "docset", new XElement(ns + "schema"), new XElement(ns + "field", new XAtsortingbute("name", "subject")), new XElement(ns + "field", new XAtsortingbute("name", "content")), new XElement(ns + "attr", new XAtsortingbute("name", "published"), new XAtsortingbute("type", "timestamp")))); 

Cela produit:

         

Vous pouvez lire l’espace de noms de votre document et l’utiliser dans des requêtes comme celles-ci:

 XDocument xml = XDocument.Load(address); XNamespace ns = xml.Root.Name.Namespace; foreach (XElement el in xml.Descendants(ns + "whateverYourElementNameIs")) //do stuff