0

由于我有限的 C# 编程经验,过去 4 天我一直在研究如何读取 XML 文件,但没有运气......我需要帮助。

我知道有 XMLReader、XDocument 以及与 LINQ 相关的东西,它们允许您读取 XML 文件。

我只有使用流式阅读器的经验,所以如果一切都失败了,我想我需要使用它来构建自己的 XML 阅读器。

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

不知道该怎么做并且没有想法。

谢谢

4

4 回答 4

1

您可以使用 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

于 2013-04-01T01:01:14.357 回答
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了解有关他们拥有的成员的更多想法和信息。

于 2013-04-01T00:12:57.523 回答
0

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

使用XDocument(LINQ 风格)将产生一段更易读的代码,但会比XmlTextReader.

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

MSDN 上的 XmlReader 示例

dotnetcurry 上的 XDocument 示例

我个人从不喜欢 XmlDocument 类,因为如果我不得不编写冗长的代码。这就是我。

于 2013-04-01T00:25:09.717 回答
-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();
于 2017-12-19T00:44:19.163 回答