Heim > Backend-Entwicklung > C++ > Wie kann ich XML mit Namespaces mithilfe von LINQ to XML korrekt analysieren?

Wie kann ich XML mit Namespaces mithilfe von LINQ to XML korrekt analysieren?

Linda Hamilton
Freigeben: 2025-01-19 02:11:13
Original
792 Leute haben es durchsucht

How to Correctly Parse XML with Namespaces Using LINQ to XML?

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:

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"),
                          };
Nach dem Login kopieren

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:

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"),
              };
Nach dem Login kopieren

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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage