XDocument contenant des espaces de noms
J'ai le code XML suivant laquelle je suis en train de requête avec XDocument:
<E2ETraceEvent xmlns="http://schemas.microsoft.com/2004/06/E2ETraceEvent">
<System xmlns="http://schemas.microsoft.com/2004/06/windows/eventlog/system">
<EventID>589828</EventID>
<Type>3</Type>
<SubType Name="Information">0</SubType>
<Level>8</Level>
<TimeCreated SystemTime="2010-06-01T09:45:15.8102117Z" />
<Source Name="System.ServiceModel" />
<Correlation ActivityID="{00000000-0000-0000-0000-000000000000}" />
<Execution ProcessName="w3wp" ProcessID="5012" ThreadID="5" />
<Channel />
<Computer>TESTSERVER3A</Computer>
</System>
<ApplicationData>
<TraceData>
<DataItem>
<TraceRecord xmlns="http://schemas.microsoft.com/2004/10/E2ETraceEvent/TraceRecord" Severity="Information">
<TraceIdentifier>http://msdn.microsoft.com/en-GB/library/System.ServiceModel.Activation.WebHostCompilation.aspx</TraceIdentifier>
<Description>Webhost compilation</Description>
<AppDomain>/LM/W3SVC/257188508/Root-1-129198591101343437</AppDomain>
<Source>System.ServiceModel.Activation.ServiceParser/39498779</Source>
<ExtendedData xmlns="http://schemas.microsoft.com/2006/08/ServiceModel/StringTraceRecord">
<VirtualPath>/Service.svc</VirtualPath>
</ExtendedData>
</TraceRecord>
</DataItem>
</TraceData>
</ApplicationData>
</E2ETraceEvent>
Exécutant le code suivant renvoie la valeur null pour xEl1 sauf que quand j'ai supprimer manuellement les espaces de noms:
XDocument xDoc = XDocument.Parse(CurrentString);
XElement xEl1 = xDoc.Element("E2ETraceEvent");
XElement xEl2 = xEl1.Element("System");
XElement xEl3 = xEl2.Element("Correlation");
XAttribute xAtt1 = xEl3.Attribute("ActivityID");
String sValue = xAtt1.Value;
Comment écrire du code pour extraire le Guid dans XDocument?
Vous devez vous connecter pour publier un commentaire.
Essayer cela, fonctionne pour moi
Vous devez utiliser Les espaces de noms.
Source complet pour essai
XNamespace
etstring
. Degueu degueu beurk.XName.Get("System",nsSys.NamespaceName)
Anthony est adressé à l'espace de noms de bits et XAttribute a une conversion explicite de GUID, donc cela devrait fonctionner:
Remarque comment les espaces de noms sont pas hérité des attributs.
À l'aide d'une seule instruction que j'ai fait ici peut parfois rendre la vie plus simple, mais elle ne faciliter le débogage plus difficile que vous ne voyez pas les valeurs intermédiaires. Modifier selon votre goût 🙂
Utilisation XNamespace objets dans votre requête pour le "xmnls=" tags dans les éléments que vous souhaitez interroger. Ne l'ai pas testé, mais quelque chose comme cela devrait fonctionner