如何使用XmlReader类?

13

我想使用XmlReader保存和加载我的xml数据。但是我不知道如何使用这个类。你能给我一个样例代码吗?


32
是的,但这也是StackOverflow的用途之一! - Unsliced
1
XmlReader是POCO Entities tt使用的阅读器,用于读取edmx文件。因此,要继续使用它们的API并正确使用它,而不是自己解析emdx文件,我需要使用XmlReader。 - Mickey Perlstein
4个回答

12

MSDN有一个简单的示例可供您开始学习,在这里

如果您对读写XML文档感兴趣,而不仅仅是使用XmlReader类,这里有一篇不错的文章介绍了您的一些选择

但如果您只是想开始尝试并进行实验,请尝试这个:

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

当我发现一些小的代码片段解决了我的问题时,我总是感到惊讶,而这些片段是我无法在包括微软官网在内的任何地方找到的。谢谢,这一个拯救了我。 - Unknown Coder

9

就我个人而言,我已经从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
14
当一个标题为“如何使用XmlReader类”的问题有一个被接受的答案,但该答案与问题根本不相关时,我们面临着一个严重的问题。我投票支持删除或重命名这个问题。 - Brian Warshaw
6
如果您需要阅读大型XML文档,这并不是一个好的解决方案。XMLReader可以让您以流的形式逐块读取它。 - richard

7

由于XmlReader是使用工厂模式抽象类,因此您应该使用Create方法而不是使用new

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

6

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接