Пространства имен XElement (как это сделать?)
Как создать xml-документ с префиксом узла, например:
<sphinx:docset>
<sphinx:schema>
<sphinx:field name="subject"/>
<sphinx:field name="content"/>
<sphinx:attr name="published" type="timestamp"/>
</sphinx:schema>
когда я пытаюсь запустить что-то вроде new XElement("sphinx:docset")
Я получаю исключение
Необработанное Исключение: Система.XML.XmlException: символ':', шестнадцатеричный val ue 0x3A, не может быть включен в имя.
в системе.XML.XmlConvert.VerifyNCName(строковое имя, ExceptionType exceptionTyp e)
в системе.XML.В LINQ.На xname..ctor(XNamespace ns, String localName)
в системе.XML.В LINQ.XNamespace.GetName (строка localName)
в системе.XML.В LINQ.На xname.Get (String expandedName)
2 ответа:
Это очень легко в LINQ to XML:
XNamespace ns = "sphinx"; XElement element = new XElement(ns + "docset");
или чтобы "псевдоним" работал правильно, чтобы он выглядел как ваши примеры, что-то вроде этого:
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"))));
что производит:
<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>