2010-07-07 6 views
3
<item> 
    <title>Aerie Peak</title> 
    <link>http://www.wow-europe.com/realmstatus/index.html#Aerie Peak</link> 
    <description>Aerie Peak - Realm Down - Lang en - Type PvE</description> 
    <category domain="status">Realm Down</category> 
    <category domain="language">en</category> 
    <category domain="type">PvE</category> 

    <category domain="queue">false</category> 
    <guid isPermaLink='false'>EU5-REALM15</guid> 
</item> 

je dois sélectionner title et status. Voici ce que je suis venu avec:Sélection des noeuds XML avec le même nom, mais un texte différent intérieur d'attribut en C#

string uri = "http://www.wow-europe.com/realmstatus/index.xml"; 
XmlDocument doc = new XmlDocument(); 
doc.Load(uri); 

XmlNodeList nodes = doc.SelectNodes("//item"); 

foreach (XmlNode node in nodes) 
{ 
    { 
    RealmList.Text += node["title"].InnerText + " - " + 
     node.SelectNodes("category[@domain='status']")[0].InnerText; 
    } 
} 

qui donne System.NullReferenceException: Object reference not set to an instance of an object. à la ligne de sélection, cependant. Je ne sais pas comment je pourrais choisir le nœud.

+0

Où l'erreur se produit-elle exactement? Fonctionne bien pour moi, quand je charge l'exemple XML à partir d'un fichier. Seul le 'node.SelectNodes (" .... "). InnerText' est difficile, car si ce noeud n'est pas présent? Tout d'abord, je ferais un 'node.SelectSingleNode()' et je stockerais cela dans une variable XmlNode et m'assurerais que la variable est '! = Null' avant d'accéder à la propriété' .InnerText' ..... –

Répondre

3

Votre code fonctionne correctement pour votre exemple, mais le fichier http://www.wow-europe.com/realmstatus/index.xml contient au moins un élément d'élément au moment de l'écriture qui ne contient aucun élément de catégorie.

Parce que ce noeud n'est pas présent, vous obtenez l'exception. Je parle de ce XML au début de http://www.wow-europe.com/realmstatus/index.xml.

<item> 
      <title>Alert</title> 
      <link>http://www.wow-europe.com/realmstatus/index.html</link> 
      <description><p><u><strong>Extended Maintenance 07/07</strong></u></p><p>We will be performing extended maintenance on the realms listed below on Wednesday, July 7th, beginning at 00:01 CEST. The maintenance is scheduled for 24 hours as we prepare for the upcoming expansion. These realms will be playable again at approximately 23:59 on Wednesday, July 7th.</p><p>All realms not listed below will undergo scheduled maintenance beginning at 05:00 CEST and will be available for play at approximately 11:00 CEST. </p><p>Additionally, paid character transfer will be unavailable for the duration of the maintenance.</p><p>[11:10] The maintenance has been extended for all realms. We apologise for any inconvenience this may cause and thank you for your patience while this is being resolved. </p><p>Balnazzar<br />Bloodfeather<br />Darksorrow<br />Defias Brotherhood<br />Earthen Ring<br />Frostwhisper<br />Genjuros<br />Haomarush<br />Hellscream<br />Laughing Skull<br />Lightning's Blade<br />Magtheridon<br />Neptulon<br />Nordrassil<br />Quel'Thalas<br />Ragnaros<br />Ravencrest<br />Runetotem<br />Shadowsong<br />Shattered Hand<br />Silvermoon<br />Skullcrusher<br />Spinebreaker<br />Stormrage<br />Stormreaver<br />Stormscale<br />Sylvanas<br />Terenas<br />The Maelstrom<br />The Venture Co.<br />Thunderhorn</p></description> 
      <guid isPermaLink='false'>Alert</guid> 

     </item> 

Je pense que c'est là que votre problème est.

+0

En effet, c'était le problème. J'ai beaucoup à apprendre, en particulier quelques vérifications de base pour les exceptions. Merci beaucoup! – JStrange

0

Vous devez également initialiser RealmList et le membre 'Texte' dans RealmList, car la chaîne par défaut est null.

Questions connexes