2009-05-24 2 views
13

Я хочу сохранить и загрузить данные xml с помощью XmlReader. Но я не знаю, как использовать этот класс. Можете ли вы дать мне пример кода для начала?Как использовать класс XmlReader?

+3

71000 результаты http://www.google.ca/search?hl=en&q=xmlreader+example – ChrisW

+26

Да, но это то, что StackOverflow для тоже! – Unsliced

+1

XmlReader - это Reader, используемый POCO Entites tt для чтения файла edmx. Поэтому, чтобы продолжить свой API, и использовать его правильно, а не самостоятельно анализировать файл emdx, мне нужно использовать XmlReader. –

ответ

8

Лично я переключился от XMLReader в System.XML.Linq.XDocument управлять своими файлами данных XML. Таким образом, я могу легко извлекать данные из xml в объекты и управлять ими, как и любой другой объект в моей программе. Когда я закончу манипулировать ими, я могу в любой момент сохранить изменения обратно в xml-файл.

 //Load my xml document 
     XDocument myData = XDocument.Load(PhysicalApplicationPath + "/Data.xml"); 

     //Create my new object 
     HelpItem newitem = new HelpItem(); 
     newitem.Answer = answer; 
     newitem.Question = question; 
     newitem.Category = category; 

     //Find the Parent Node and then add the new item to it. 
     XElement helpItems = myData.Descendants("HelpItems").First(); 
     helpItems.Add(newitem.XmlHelpItem()); 

     //then save it back out to the file system 
     myData.Save(PhysicalApplicationPath + "/Data.xml"); 

Если я хочу, чтобы использовать эти данные в легко управляемых наборов данных я могу привязать его к списку моих объектов.

 List<HelpItem> helpitems = (from helpitem in myData.Descendants("HelpItem") 
        select new HelpItem 
        { 
         Category = helpitem.Element("Category").Value, 
         Question = helpitem.Element("Question").Value, 
         Answer = helpitem.Element("Answer").Value, 
        }).ToList<HelpItem>(); 

Теперь его можно обойти и обработать с помощью любых неотъемлемых функций моего класса объектов.

Для удобства мой класс имеет функцию создания себя как узла xml.

public XElement XmlHelpItem() 
    { 
     XElement helpitem = new XElement("HelpItem"); 
     XElement category = new XElement("Category", Category); 
     XElement question = new XElement("Question", Question); 
     XElement answer = new XElement("Answer", Answer); 
     helpitem.Add(category); 
     helpitem.Add(question); 
     helpitem.Add(answer); 
     return helpitem; 
    } 
+4

Если мне нужно запросить XML, как я запрашиваю другие данные, я согласен. Но для простой проверки или поиска только в прямом направлении XmlReader - лучший выбор, потому что он более эффективен. – Josh

+13

У нас есть серьезная проблема, когда вопрос под названием «Как использовать класс XmlReader» имеет принятый ответ, который не подходит для ответа на вопрос. Я голосую, чтобы удалить или переименовать вопрос. –

+5

Это нехорошее решение, если вы читаете огромные документы XML. XMLReader позволяет вам транслировать и читать фрагменты. – richard

7

Вы должны использовать метод Create вместо использования new, поскольку XmlReader является abstract class использованием the Factory pattern.

var xmlReader = XmlReader.Create("xmlfile.xml"); 
+0

Это должно быть принято как реальный ответ на этот вопрос. –

12

MSDN имеет простой пример, чтобы вы начали here.

Если вам интересно читать и писать документы XML, а не только специально использовать класс XmlReader, то есть a nice article covering a few of your options here.

Но если вы просто хотите, чтобы начать и играть вокруг, попробуйте это:

XmlReaderSettings settings = new XmlReaderSettings(); 
settings.IgnoreWhitespace = true; 
settings.IgnoreComments = true; 
XmlReader reader = XmlReader.Create("file.xml", settings); 
+0

Меня всегда удивляет, когда я нахожу небольшие фрагменты кода, которые решают мою проблему, и они являются фрагментами, которые я не мог найти нигде *, включая сайт MS. Спасибо, этот меня спас. –

Смежные вопросы