Чтение xml-файла по 50 строк за раз

В настоящее время мы пытаемся создать метод для чтения файлов XML на данный момент по 50 строк за раз, это будет увеличено, чтобы позволить использовать в программе файлы большего размера.

На данный момент я пытаюсь сделать это с помощью следующего кода.

 List<dataclass.DataRecord> list = new List<dataclass.DataRecord>();
 string filename = "FileLocation"
 XmlDocument testing = new XmlDocument();

 //using (StreamReader streamreader = new StreamReader(filename))
 using (XmlTextReader reader = new XmlTextReader(new StringReader(filename)))
 {
   while (reader.Read() != null)
   {
    for (int i = 0; i < 50; i++)
    {
     testing.Load(reader);

     //list.add(line);
     Console.WriteLine(testing);
     //testing.Load(reader);
     }
   }
 }

прокомментированные строки взяты из предыдущих идей, которые я использовал для достижения своей цели, а имя файла было удалено, так как я просто предпочитаю не размещать его в Интернете.

В основном на данный момент я продолжаю получать следующую ошибку:

Данные на корневом уровне недействительны. Линия 1, позиция 1.

Так что я не знаю, если я:

А. Идти по этому пути правильно.

B. Единственный способ исправить эту ошибку — окружить файл «testing.load» тегами «root + /root».

надеюсь, что кто-то может помочь поблагодарить.


person user2169674    schedule 02.04.2013    source источник
comment
XML следует рассматривать как дерево, а не как плоский файл со строками. Строка не имеет смысла в XML, вы можете сократить узел, если прочитаете только 50 строк. Чего вы добиваетесь этим?   -  person Belogix    schedule 02.04.2013
comment
Хорошо, я посмотрю, я новичок в этом.   -  person user2169674    schedule 02.04.2013
comment
чтобы ответить на ваш вопрос, чего я достиг, я просто пытаюсь загрузить файл постепенно, а не все за один раз.   -  person user2169674    schedule 02.04.2013
comment
Хорошо, я добавил в качестве ответа, поскольку вы не должны использовать комментарии в качестве метода общения, и моя идея немного длиннее, чем комментарий.   -  person Belogix    schedule 02.04.2013


Ответы (3)


Как я объяснил в своем комментарии, XML состоит из узлов, тогда как вы смотрите на него, как если бы это был плоский файл со строками.

Есть пара вопросов Stackoverflow с ответами, которые соответствуют тому, что вы пытаетесь сделать. Настоящим вопросом является "Как загрузить большой файл XML". Ответ заключается в том, чтобы использовать поток, а не загружать его одним большим фрагментом. Далее вы можете найти множество ресурсов об использовании XmlReader.

Несколько указателей на другие статьи SO:

C# и чтение больших файлов XML

Чтение больших документов XML в .net

Надеюсь, это поможет!

person Belogix    schedule 02.04.2013
comment
очень помогает, так же, как вы написали, я также просматривал эти ссылки из комбинации вашего комментария и ответов pyfods. - person user2169674; 02.04.2013

Если вы только пытаетесь загрузить xml в XmlDocument, почему бы просто не

 XmlDocument testing = new XmlDocument();
 testing.Load(filename);
person evgenyl    schedule 02.04.2013
comment
Я знаю, что мог бы просто сделать это, но, возможно, программе нужно было загружать очень большие файлы, поэтому этот метод постепенной загрузки файла, надеюсь, должен быть эффективным. - person user2169674; 02.04.2013

Если ваш файл XML действительно большой, вам лучше использовать какой-либо синтаксический анализатор (анализирует тег за тегом, атрибут за атрибутом и т. д.), а не синтаксический анализатор DOM (загружает весь документ во время синтаксического анализа, сохраняет его в памяти) ).

person pfyod    schedule 02.04.2013