Maison > développement back-end > C++ > Comment éviter les NullPointerExceptions lors de l'interrogation d'éléments XML avec des espaces de noms ?

Comment éviter les NullPointerExceptions lors de l'interrogation d'éléments XML avec des espaces de noms ?

Patricia Arquette
Libérer: 2025-01-05 13:39:38
original
961 Les gens l'ont consulté

How to Avoid NullPointerExceptions When Querying XML Elements with Namespaces?

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>
Copier après la connexion

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;
Copier après la connexion

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;
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal