Préfixes d'espace de noms XML dans XElement
La création de documents XML avec des préfixes de nœud peut être difficile avec XElement. Cette question explore comment gérer les espaces de noms préfixés lors de l'utilisation de XElement.
Question : Comment pouvons-nous générer des documents XML avec des nœuds préfixés comme cet exemple ?
<sphinx:docset> <sphinx:schema> <sphinx:field name="subject"/> <sphinx:field name="content"/> <sphinx:attr name="published" type="timestamp"/> </sphinx:schema> </sphinx:docset>
Exception : L'utilisation de new XElement("sphinx:docset") génère un exception :
Unhandled Exception: System.Xml.XmlException: The ':' character, hexadecimal val ue 0x3A, cannot be included in a name.
Réponse : En utilisant LINQ to XML, nous pouvons facilement ajouter des espaces de noms aux éléments.
XNamespace ns = "sphinx"; XElement element = new XElement(ns + "docset");
Pour définir des alias comme dans l'exemple, utilisez ce qui suit :
XNamespace ns = "http://url/for/sphinx"; XElement element = new XElement("container", new XAttribute(XNamespace.Xmlns + "sphinx", ns), new XElement(ns + "docset", new XElement(ns + "schema"), new XElement(ns + "field", new XAttribute("name", "subject")), new XElement(ns + "field", new XAttribute("name", "content")), new XElement(ns + "attr", new XAttribute("name", "published"), new XAttribute("type", "timestamp"))));
Ce code produira la structure XML souhaitée :
<container xmlns:sphinx="http://url/for/sphinx"> <sphinx:docset> <sphinx:schema /> <sphinx:field name="subject" /> <sphinx:field name="content" /> <sphinx:attr name="published" type="timestamp" /> </sphinx:docset> </container>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!