Как использовать класс XmlReader? - PullRequest
12 голосов
/ 24 мая 2009

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

Ответы [ 4 ]

12 голосов
/ 24 мая 2009

MSDN имеет простой пример, с чего можно начать здесь .

Если вы заинтересованы в чтении и написании XML-документов, а не просто в особом смысле с использованием класса XmlReader, здесь есть хорошая статья, охватывающая несколько ваших вариантов .

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

 XmlReaderSettings settings = new XmlReaderSettings();
 settings.IgnoreWhitespace = true;
 settings.IgnoreComments = true;
 XmlReader reader = XmlReader.Create("file.xml", settings);
9 голосов
/ 25 мая 2009

Лично я перешел с 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;
    }
7 голосов
/ 24 мая 2009

Вы должны использовать метод Create вместо new, поскольку XmlReader является abstract class с использованием фабричного шаблона .

var xmlReader = XmlReader.Create("xmlfile.xml");
6 голосов
/ 24 мая 2009

Из превосходной C # 3.0 в двух словах рассмотрите пример кода из главы 11.

...