So erstellen Sie ein XML-Dokument mit einem Knotenpräfix wie:
<sphinx:docset>
<sphinx:schema>
<sphinx:field name="subject"/>
<sphinx:field name="content"/>
<sphinx:attr name="published" type="timestamp"/>
</sphinx:schema>
Wenn ich versuche, so etwas wie new XElement("sphinx:docset")
eine Ausnahme auszuführen
Nicht behandelte Ausnahme: System.Xml.XmlException: Das Zeichen ':', hexadezimaler Wert 0x3A, kann nicht in einen Namen aufgenommen werden.
at System.Xml.XmlConvert.VerifyNCName (String name, ExceptionType exceptionTyp e)
at System.Xml.Linq.XName..ctor (XNamespace ns, String localName)
at System.Xml.Linq.XNamespace.GetName (String localName)
at System .Xml.Linq.XName.Get (String expandName)
c#
xml
linq
namespaces
Edward83
quelle
quelle
XmlNamespaceManager
Klasse an.sphinx
Präfix deklarieren .Antworten:
In LINQ to XML ist das ganz einfach:
XNamespace ns = "sphinx"; XElement element = new XElement(ns + "docset");
Oder damit der "Alias" richtig funktioniert, damit er wie Ihre Beispiele aussieht, ungefähr so:
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"))));
Das ergibt:
<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>
quelle
Sie können den Namespace Ihres Dokuments lesen und in Abfragen wie diesen verwenden:
XDocument xml = XDocument.Load(address); XNamespace ns = xml.Root.Name.Namespace; foreach (XElement el in xml.Descendants(ns + "whateverYourElementNameIs")) //do stuff
quelle