2010-10-26 3 views
1

Ainsi, dans le XML ci-dessous en utilisant cet exemple de code, je peux saisir avec succès des adresses HomeAddress et Name pour chaque entrée de mon XML. Que dois-je faire si je dois également saisir les informations d'identification (permis de conduire numéro xxx) de chaque entrée?Xpath/C#, obtenir des données de plusieurs espaces de noms

EDIT: Mise à jour exemple XML pour clarificaiton

Exemple de code:

XmlDocument xDoc = new XmlDocument(); 
     xDoc.LoadXml(responseFromServer); 
     XmlNamespaceManager xnsmgr = new XmlNamespaceManager(xDoc.NameTable); 
     xnsmgr.AddNamespace("ns1", "http://www.w3.org/2005/Atom"); 
     xnsmgr.AddNamespace("ns2", "http://strange.com/ns/1.0/"); 
     XmlNodeList xnlInsuredListMembers = xDoc.SelectNodes("//ns2:InsuredListMember", xnsmgr); 
     foreach (XmlNode xnMember in xnlInsuredListMembers) 
     { 
      XmlNode xnHomeAddress = xnMember.SelectSingleNode("ns2:HomeAddress", xnsmgr); 
      string sHomeAddress = xnHomeAddress.InnerText; 

      XmlNode xnName = xnMember.SelectSingleNode("ns2:Name", xnsmgr); 
      string sName = xnName.InnerText; 

      MessageBox.Show(sHomeAddress + sName); 
     } 

XML Exemple

<?xml version="1.0" encoding="UTF-8"?> 
    <feed xmlns="http://www.w3.org/2005/Atom"> 
     <id>someID</id> 
     <title type="text">Title</title> 
     <author> 
     <name>XML Author</name> 
     </author> 
     <updated>2010-10-25T20:05:30.267Z</updated> 
     <link href="currentURL"></link> 
     <link href="nextURL"></link> 
     <entry> 
     <id>Drivers License Numberxxx</id> 
     <content type="application/vnd.ctct+xml"> 
      <InsuredListMember xmlns="http://strange.com/ns/1.0/"> 
      <HomeAddress>123 anystreet</HomeAddress> 
      <Name>doe, somegal</Name> 
      </InsuredListMember> 
     </content> 
     </entry> 
     <entry> 
     <id>Drivers License Numberxxx</id> 
     <content type="application/vnd.ctct+xml"> 
      <InsuredListMember xmlns="http://strange.com/ns/1.0/"> 
      <HomeAddress>321 anystreet</HomeAddress> 
      <Name>doe, someguy</Name> 
      </InsuredListMember> 
     </content> 
     </entry> 
    </feed> 
+1

supprimé mon post car elle est liée à votre première édition et est non-sens avec le message édité mis à jour :) – pstrjds

Répondre

3

D'abord, ce //ns2:ContactListMember devrait être //ns2:InsuredListMember selon votre échantillon d'entrée.

Deuxièmement, si le nœud de contexte est ns2:InsuredListMember, l'attribut id est sélectionné par cette expression: @id.

Si vous voulez que l'enfant ns1:id de ns1:entry pour la donnée ns2:InsuredListMember, cette expression XPath: ../../ns1:id

+0

merci, ont corrigé l'échantillon de code. devient poilue lorsque vous travaillez avec plusieurs versions = X Aussi, avez mis à jour le xml pour simplifier ce que je cherche. Je n'ai pas besoin de l'attribut ID du membre assuré, j'ai besoin du champ id de l'élément d'entrée, (feed/entry/id) –

+0

@Ares Demoulins: Vérifie ma modification. –

+0

+1 pour une réponse correcte. –

Questions connexes