Maison >développement back-end >C++ >Comment analyser correctement les documents XML avec des espaces de noms à l'aide de XDocument ?

Comment analyser correctement les documents XML avec des espaces de noms à l'aide de XDocument ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-30 01:42:36572parcourir

How to Properly Parse XML Documents with Namespaces using XDocument?

Comment analyser du XML avec des espaces de noms dans XDocument

Lorsque vous travaillez avec du XML contenant des espaces de noms, il est important de les gérer correctement dans votre code . Sans spécifier les espaces de noms corrects, XDocument risque de ne pas être en mesure d'analyser le XML efficacement.

Considérez l'exemple 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}">
    </Correlation>
  </System>
</E2ETraceEvent>

Si vous tentez d'analyser ce XML à l'aide de XDocument sans spécifier le espaces de noms, vous pouvez rencontrer des valeurs nulles pour certains éléments. Voici un extrait de code qui illustre ce problème :

XDocument xDoc = XDocument.Parse(XMLString);
XElement xEl1 = xDoc.Element("E2ETraceEvent");
XElement xEl2 = xEl1.Element("System");
XElement xEl3 = xEl2.Element("Correlation");
XAttribute xAtt1 = xEl3.Attribute("ActivityID");
String sValue = xAtt1.Value; // Returns null

Solution : Utilisation d'espaces de noms

Pour analyser correctement XML avec des espaces de noms, vous devez utiliser la stratégie suivante :

  1. Définissez un préfixe d'espace de noms pour chaque espace de noms utilisé dans le XML.
  2. Utilisez le préfixe d'espace de noms lors du référencement d'éléments dans le XML.

Voici un extrait de code mis à jour qui illustre cette solution :

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; // Returns the ActivityID

En utilisant des espaces de noms correctement, vous pouvez vous assurer que votre code peut extraire et manipuler avec précision les données des documents XML contenant des espaces de noms.

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!

Déclaration:
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