Что касается чтения C # Xml - PullRequest
0 голосов
/ 02 декабря 2011

В настоящее время я делаю XML-файл, который включает «название» города, «регион», «широту» и «lng».

Вот мой код:

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)));
}

Где listeCooVilles - это словарь.

Вот мой XML: я сделал пример для теста:

<?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>

Я видел много постов, делающих то же самое, что и выше, в StackOverflow,но я все еще получаю исключение IndexOutOfRange на линии

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

Может кто-нибудь помочь?Спасибо!

Ответы [ 4 ]

5 голосов
/ 02 декабря 2011

Как указывалось, это те элементы, а не атрибуты.Ваш код должен измениться на это:

    nomVille = unNode.Item["name"].Value
    region = unNode.Item["region"].Value
    lat = unNode.Item["lat"].Value
    lng = unNode.Item["lng"].Value
5 голосов
/ 02 декабря 2011

Элемент не имеет атрибутов - только подэлементы. Атрибутами являются пары имя = значение на том же уровне, что и элемент. Э.Г.

<?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-документа.

3 голосов
/ 02 декабря 2011

Ни один из узлов в вашем примере XML не имеет атрибутов, поэтому в коллекции содержится null элементов.

Попробуйте изменить его на:

<?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 должен предоставить действительную коллекцию в unNode.Attributes.

2 голосов
/ 02 декабря 2011

Вы используете атрибуты в теге city, но я думаю, что вы должны использовать элементы xml.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...