XmlReader - проблема с чтением XML-файла без новых строк

Когда я использую 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-файле, когда я этого не делаю. У t есть пробелы.


person rabin    schedule 25.08.2011    source источник


Ответы (1)


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

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

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

while (!reader.EOF)
{
    if (reader.NodeType == XmlNodeType.Element && reader.Name == "entry")
    {
        Console.WriteLine(reader.ReadElementContentAsString());
    }
    else
    {
        reader.Read();
    }
}
person Laurent le Beau-Martin    schedule 25.08.2011
comment
Спасибо. Клянусь, я ТАК искал это. - person rabin; 26.08.2011
comment
Вы выполняли поиск с помощью внутреннего поиска SO? Потому что не очень хорошо, гугл намного лучше;) - person Laurent le Beau-Martin; 26.08.2011