Heim >Backend-Entwicklung >C++ >Wie kann ich XML mit Namespaces mithilfe von LINQ to XML korrekt analysieren?
Umgang mit XML-Namespaces in LINQ to XML
Bei der Verarbeitung von XML-Daten, die Namespaces enthalten, ist die ordnungsgemäße Handhabung von Namespaces für das Abrufen und Bearbeiten der erforderlichen Elemente von entscheidender Bedeutung. So verwenden Sie LINQ to XML, um XML zu durchqueren, das Namespaces enthält:
Beispielcode bereitgestellt:
<code class="language-csharp">string theXml = @"<Response xmlns=""http://myvalue.com""><Result xmlns:a=""http://schemas.datacontract.org/2004/07/My.Namespace"" xmlns:i=""http://www.w3.org/2001/XMLSchema-instance""><a:TheBool>true</a:TheBool><a:TheId>1</a:TheId></Result></Response>"; XDocument xmlElements = XDocument.Parse(theXml); var elements = from data in xmlElements.Descendants("Result") select new { TheBool = (bool)data.Element("TheBool"), TheId = (int)data.Element("TheId"), };</code>
Dieser Code analysiert das XML nicht korrekt, wenn Namespaces in der XML-Zeichenfolge verwendet werden, was zu Nullwerten führt. Um dieses Problem zu lösen, müssen wir den XML-Namespace explizit in der LINQ-Abfrage angeben.
Um einen XML-Namespace in einer LINQ-Abfrage zu definieren, können Sie das XNamespace
-Objekt verwenden. Mit diesem Objekt können Sie XName
-Instanzen mit dem entsprechenden Namespace-Präfix und URI erstellen.
Das Folgende ist der korrigierte Code:
<code class="language-csharp">string theXml = @"<Response xmlns=""http://myvalue.com""><Result xmlns:a=""http://schemas.datacontract.org/2004/07/My.Namespace"" xmlns:i=""http://www.w3.org/2001/XMLSchema-instance""><a:TheBool>true</a:TheBool><a:TheId>1</a:TheId></Result></Response>"; XDocument xmlElements = XDocument.Parse(theXml); XNamespace ns = "http://myvalue.com"; XNamespace nsa = "http://schemas.datacontract.org/2004/07/My.Namespace"; var elements = from data in xmlElements.Descendants(ns + "Result") select new { TheBool = (bool)data.Element(nsa + "TheBool"), TheId = (int)data.Element(nsa + "TheId"), };</code>
Im korrigierten Code deklarieren wir zunächst die XNamespace
-Objekte ns
und nsa
mithilfe von Namespace-URIs. Dann geben wir in den Abfragen Descendants
und Element
XName
mit dem Namespace-Präfix an. Auf diese Weise kann LINQ to XML Elemente im angegebenen Namespace korrekt identifizieren und darauf zugreifen.
Das obige ist der detaillierte Inhalt vonWie kann ich XML mit Namespaces mithilfe von LINQ to XML korrekt analysieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!