2011-12-01 8 views
0

私は現在、都市の「名前」、「地域」、「緯度」緯度および「lng」を含むXMLファイルを作成しています。 listeCooVillesがDictionnaryあるC#Xmlの読書に関して

XmlDocument XmlFile = new XmlDocument(); 
try { 
    XmlFile.Load("..\\..\\liste.xml"); 
} 
catch (Exception ex) 
{ 
    Console.WriteLine("Erreur" + ex.Message); 
}; 
XmlNodeList MyNodeXML = XmlFile.GetElementsByTagName("city"); 
foreach (XmlNode unNode in MyNodeXML) 
{ 
    string nomVille = unNode.Attributes[0].Value; 
    string lat = unNode.Attributes[1].Value; 
    string lng = unNode.Attributes[2].Value; 
    listeCooVilles.Add(nomVille, new PointF(float.Parse(lat), float.Parse(lng))); 
} 

は、ここに私のコードです。ここで

は私のXMLです:私は、テスト用のサンプルをした:私はStackOverflowの中に上記と同じことをやって多くの記事を見ましたが、私はまだラインにIndexOutOfRange例外を取得
<?xml version="1.0" encoding="UTF-8"?> 
<cities> 
    <city> 
     <name>Abercorn</name> 
     <region>Montérégie</region> 
     <lat>45.032999</lat> 
     <lng>-72.663057</lng> 
    </city> 
<cities> 

string nomVille = unNode.Attributes[0].Value; 

誰かが助けることができますか?ありがとう!

+0

属性を表示していませんか?名前/地域などは要素です –

+0

xmlに属性がないため、常に例外が発生します。あなたは子ノードのために行く必要があります。 – Peter

答えて

5

要素には属性がありません。サブ要素のみです。属性は、要素と同じレベルの名前=値のペアです。例えば。 (あなたがコード化されてきたように)

<?xml version="1.0" encoding="UTF-8"?> 
<cities> 
    <city name="Abercorn" region="Montérégie" lat="45.032999" lng="-72.663057" /> 
    <city name="Granby" region="Montérégie" lat="45.4" lng="-72.733333" /> 
</cites> 

ネスト要素(あなたがもともと行ったように)と属性を使用して、XML文書を構成する両方の等しく有効な方法です。

+0

私のXMLを書いたやり方はありませんか? – user1076263

+0

確かにあります... XmlReaderクラスを見てください:http://msdn.microsoft.com/en-us/library/cc189056(v=vs.95).aspx – Josh

3

XMLサンプル内のどのノードも属性を持たないため、コレクションにはnull要素が含まれています。 unNode.Attributesで有効なコレクションを提供しなければならない

<?xml version="1.0" encoding="UTF-8"?> 
<cities> 
    <city testAttr = "hello!"> 
     <name>Abercorn</name> 
     <region>Montérégie</region> 
     <lat>45.032999</lat> 
     <lng>-72.663057</lng> 
    </city> 
<cities> 

testAttrの追加:

は、それを変更してみてください。

+0

コメントをいただきありがとうございます:私は試みましたが、それでも例外をスローします.. – user1076263

2

あなたはcityタグの属性を使用していますが、xml要素を使用する必要があります。

5

これらの要素は属性ではありません。あなたのコードは次のように変更する必要があります:

nomVille = unNode.Item["name"].Value 
    region = unNode.Item["region"].Value 
    lat = unNode.Item["lat"].Value 
    lng = unNode.Item["lng"].Value