C#中的XML阅读器

时间:2013-04-01 00:07:28

标签: c# xml xml-parsing linq-to-xml xmlreader

凭借我有限的C#编程经验,我一直在研究如何在过去4天内阅读XML文件而没有运气......我需要帮助。

我知道有XMLReader,XDocument以及与LINQ有关的内容,它允许您读取XML文件。

我只有使用streamreader的经验,所以如果所有其他方法都失败了,我想我需要使用它来构建我自己的XML阅读器。

关于我的XML文件的结构,它有一个标签,它包含一系列包含许多子节点的其他标签。

不知道该怎么做,也没有想法。

由于

4 个答案:

答案 0 :(得分:1)

最简单的方法是使用XDocument。例如:

<myroot>
    <somesub>1</somesub>
    <somesub>2</somesub>
    <somesub>3 <b>- or -</b> 4</somesub>
</myroot>

然后:

string path = @"myfile.xml";
var doc = XDocument.Load(path);

// Get the root node <myroot>
var root = doc.Root;

// Loop through the children and print each one's value:
foreach(var child in root.Elements())
{
    Console.WriteLine(child.Value);
}

查看XElementXDocument的文档,了解有关其成员的更多想法和信息。

答案 1 :(得分:0)

所有这些用于读取和解析XML的类都有不同的用途。

使用XDocument(LINQ风格)会产生更易读的代码,但会占用比XmlTextReader更多的内存。

如果您正在处理大型文件,请使用XmlReader类。

XmlReader example on MSDN

XDocument examples on dotnetcurry

我个人从未喜欢过XmlDocument类,因为如果强迫我写代码那么冗长的代码。那就是我。

答案 2 :(得分:0)

您可以使用XmlTextReader。

 using (XmlTextReader xmlTextReader = new XmlTextReader("FILE_NAME.xml"))
 {
    while (xmlTextReader.Read())
    {
        switch (xmlTextReader.NodeType)
        {
            // ... Process node types here ex. XmlNodeType.Element
        }
     }
 }

了解更多: http://msdn.microsoft.com/en-us/library/system.xml.xmltextreader.aspx

但是XmlTextReader不验证数据,因此如果要验证数据,请使用XmlReader: http://msdn.microsoft.com/en-us/library/system.xml.xmlreader.aspx

答案 3 :(得分:-1)

以下是您需要的样本。你可以用这种最简单的方式遍历XML文件。

XmlDocument xmldoc = new XmlDocument();
        xmldoc.Load("sample.xml");

        XmlNodeList name = xmldoc.GetElementsByTagName("name");
        XmlNodeList price = xmldoc.GetElementsByTagName("price");
        XmlNodeList description = xmldoc.GetElementsByTagName("description");
        XmlNodeList calories = xmldoc.GetElementsByTagName("calories");


        for (int i = 0; i < name.Count; i++)
        {
            Console.WriteLine(name[i].InnerText);
            Console.WriteLine("Price: " + price[i].InnerText);
            Console.WriteLine(description[i].InnerText);
            Console.WriteLine("calories: " + calories[i].InnerText);
        }

        Console.ReadKey();