Gestion des espaces de noms XML dans XDocument
Lorsque vous travaillez avec des documents XML contenant des espaces de noms, il peut y avoir des cas où l'interrogation d'éléments renvoie des valeurs nulles. Cela peut se produire lorsque l'espace de noms XML n'est pas correctement géré.
Considérez l'extrait XML suivant :
<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}"><!--Value to be extracted--> <VirtualPath>/Service.svc</VirtualPath> </Correlation> </System> </E2ETraceEvent>
Supposons que vous disposiez du code suivant qui tente d'interroger l'élément Correlation et d'extraire son ActivityID. valeur d'attribut :
XDocument xDoc = XDocument.Parse(xmlString); XElement xEl1 = xDoc.Element("E2ETraceEvent"); XElement xEl2 = xEl1.Element("System"); XElement xEl3 = xEl2.Element("Correlation"); // NullPointerException can occur here XAttribute xAtt1 = xEl3.Attribute("ActivityID"); String sValue = xAtt1.Value;
L'exécution de ce code sans gérer les espaces de noms renvoie une référence nulle pour xEl3 car la méthode Element() semble pour les éléments correspondant au nom sans tenir compte de l'espace de noms. Pour résoudre ce problème, il est nécessaire d'incorporer l'espace de noms dans la requête.
XNamespace nsSys = "http://schemas.microsoft.com/2004/06/windows/eventlog/system"; XElement xEl2 = xDoc.Element(nsSys + "System"); XElement xEl3 = xEl2.Element(nsSys + "Correlation"); XAttribute xAtt1 = xEl3.Attribute("ActivityID"); String sValue = xAtt1.Value;
En utilisant la classe XNamespace pour représenter l'espace de noms, la méthode Element() peut identifier correctement l'élément dans l'espace de noms. Dans cet exemple, nsSys représente l'espace de noms de l'élément System.
En résumé, lorsque vous traitez des documents XML contenant des espaces de noms, il est crucial de gérer correctement les espaces de noms pour éviter les références nulles lors de l'interrogation des éléments. En utilisant la classe XNamespace et en l'incorporant dans la méthode Element(), on peut accéder avec précision aux éléments et à leurs attributs.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!