Xml + C# (read/write/seek)

  • Автор темы Real-Mulik
  • Дата начала
Статус
Закрыто для дальнейших ответов.
R

Real-Mulik

#1
С помощью какого объекта из System.XML можно быстро и надежно (в частности) прочитать данные? Хотя про операции записи и поиска тоже интересно узнать.
 
X

xopap

#3
С помощью какого объекта из System.XML можно быстро и надежно (в частности) прочитать данные? Хотя про операции записи и поиска тоже интересно узнать.
Класс XmlTextReader применяется для быстрого однонаправленного чтения потока XML-данных. Поэтому в вашем случае он лучший. Этот класс прочитывает документ попорядку сверху-вниз, поэтому можете использовать его для поиска. Это быстрый класс.
Класс XmlTextWriter аналогично - однонаправленная некешируемая запись.
Также есть класс XmlDocument. Он использует W3C DOM модель, т.е. загружает документ в память и работает с их "виртуальной копией". DOM представляет документ в виде дерева. XmlDocument наиболее полезен в том случае, если нужно загрузить XML-документ в память для того, чтобы изменить атрибуты узлов, добавить или удалить новые элементы. Этот класс медленнее двух предыдущих.
Использование XML класса зависит от Вашей цели.
 
R

Real-Mulik

#4
<!--QuoteBegin-NikSoft+28:07:2006, 05:36 -->
<span class="vbquote">(NikSoft @ 28:07:2006, 05:36 )</span><!--QuoteEBegin-->Используй System.XML.XMLTextReader
[snapback]41176" rel="nofollow" target="_blank[/snapback]​
[/quote]
Я использовал метод Read() и ReadString() однако при организации поиска появились ряд проблем: Как только я обращаюсь к одному или другому методу, этот класс считывает уже следующую строку, а в некоторых случаях ведь необходимо считать строку, проверить её и её же вывести.. я использовал примерно такой код:
Код:
if ([b]reader.Name == "company"[/b]){
s = reader.ReadString();
if (EnterText == s){
Console.WriteLine("Was found:");
Console.WriteLine("company name: {0}",reader.ReadString());}}
Однако при обращении к reader.Name программа переходит на новую запись и на экране появляется пуcтое поле! :)
 
X

xopap

#5
Я использовал метод Read() и ReadString() однако при организации поиска появились ряд проблем: Как только я обращаюсь к одному или другому методу, этот класс считывает уже следующую строку, а в некоторых случаях ведь необходимо считать строку, проверить её и её же вывести.. я использовал примерно такой код:
Код:
if ([b]reader.Name == "company"[/b]){
s = reader.ReadString();
if (EnterText == s){
Console.WriteLine("Was found:");
Console.WriteLine("company name: {0}",reader.ReadString());}}
Однако при обращении к reader.Name программа переходит на новую запись и на экране появляется пуcтое поле! :ph34r:
В этом и заключается однонаправленность чтения классом XmlTextReader: по каждому обращению к методу Read() он читает дальше. Я не понимаю, зачем в Вашем коде надо вызывать reader.ReadString() в WriteLine. Возможно Вам нужен метод reader.GetAttribute("...") или что-то вроде него.
Обычно работа с XmlTextReader'ом организуется так: прочитали запись, обработали, и так до конца чтения:
Код:
while (reader.Read()) 
{
...
}
 
Статус
Закрыто для дальнейших ответов.