Navigieren in XML mit Namespaces in XDocument
Beim Arbeiten mit XML, das Namespaces enthält, ist es wichtig, deren Auswirkungen auf die Elementabfrage in XDocument zu berücksichtigen. Standardmäßig werden XDocument-Elemente ohne Berücksichtigung von Namespaces abgefragt. Dies kann zu unerwarteten Ergebnissen führen, wie im bereitgestellten Beispiel-XML gezeigt:
<E2ETraceEvent xmlns="http://schemas.microsoft.com/2004/06/E2ETraceEvent"> <System xmlns="http://schemas.microsoft.com/2004/06/windows/eventlog/system"> <EventID>589828</EventID> <Correlation ActivityID="{00000000-0000-0000-0000-000000000000}" /> </System> </E2ETraceEvent>
In diesem Szenario gibt der folgende Code aufgrund der Existenz des Namespace Null für xEl1 zurück:
XDocument xDoc = XDocument.Parse(CurrentString); XElement xEl1 = xDoc.Element("E2ETraceEvent");
Beheben des Problems mit Namespaces
Um XML mit Namespaces korrekt zu navigieren, verwenden Sie die XNamespace-Klasse. XNamespace bietet eine Möglichkeit, einen Namespace anzugeben und ihn während der Abfrage mit Elementnamen zu kombinieren. Hier ist der überarbeitete Code:
XNamespace nsSys = "http://schemas.microsoft.com/2004/06/windows/eventlog/system"; XElement xEl2 = xDoc.Element(nsSys + "System");
Jetzt enthält xEl2 das Systemelement mit dem angegebenen Namespace. Sie können weiterhin auf ähnliche Weise durch den XML-Baum navigieren und dabei die relevanten Namespaces einbeziehen.
Zusätzliche Hinweise
Das obige ist der detaillierte Inhalt vonWie kann ich XML-Elemente mit Namespaces mithilfe von XDocument effektiv abfragen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!