XmlReader - проблема с чтением XML-файла без перевода строки - PullRequest
6 голосов
/ 25 августа 2011

Когда я использую XmlReader для анализа XML-файла, я получаю разные результаты в зависимости от того, правильно ли отформатирован XML-файл (т. Е. С символами новой строки) или нет.

Это код, который я использую:

XmlReader reader = new XmlTextReader(xmlfile);
reader.MoveToContent();
while (reader.Read())
{
    switch (reader.NodeType)
    {
        case XmlNodeType.Element:
            if (reader.Name == "entry")
            {
                Console.WriteLine(reader.ReadElementContentAsString());
            }
            break;
    }
}

И содержимое XML, которое я использовал:

<xport><meta><columns>5</columns><legend><entry>AVERAGE:host:ed402b4d-71e7-4a8d-be29-ab6e54e955c8:memory_total_kib</entry><entry>AVERAGE:host:ed402b4d-71e7-4a8d-be29-ab6e54e955c8:memory_free_kib</entry><entry>AVERAGE:host:ed402b4d-71e7-4a8d-be29-ab6e54e955c8:xapi_memory_usage_kib</entry><entry>AVERAGE:host:ed402b4d-71e7-4a8d-be29-ab6e54e955c8:xapi_free_memory_kib</entry><entry>AVERAGE:host:ed402b4d-71e7-4a8d-be29-ab6e54e955c8:xapi_live_memory_kib</entry></legend></meta></xport>

Код выводит только 3 строки, когда он действительно должен печатать 5. Я предполагаю, что я что-то упустил, но мне не имеет смысла, что один и тот же код будет давать разные результаты в одном и том же XML-файле, когда У меня нет пробелов.

1 Ответ

8 голосов
/ 26 августа 2011

См. Почему XmlReader пропускает все остальные элементы, если нет разделителя пробелов?

Вы звоните [ReadElementContentAsString], который будет использовать элемент и место«курсор» перед следующим элементом.Затем вы снова вызываете Read, который перемещает курсор (например, к текстовому узлу внутри элемента).

Модифицированный цикл (почти так же, как в другом вопросе):

while (!reader.EOF)
{
    if (reader.NodeType == XmlNodeType.Element && reader.Name == "entry")
    {
        Console.WriteLine(reader.ReadElementContentAsString());
    }
    else
    {
        reader.Read();
    }
}
...