如何在C#中读取XML文件?

5
我有以下XML文件,想知道最佳读取此XML文件的方法。
<MyFile> 
  <Companies> 
    <Company>123</Company> 
    <Company>456</Company>
    <Company>789</Company> 
  </Companies> 
</MyFile>

作为输出,我需要一个值的集合,例如"123,456,789"或字符串数组string[]。
我们能使用Linq to xml吗?如何使用?

2
是的,使用Linq。关于Linq有10000000多个教程。也许你可以从这里开始:http://www.codeproject.com/Articles/19154/Understanding-LINQ-C - sabisabi
可能是LINQ读取XML的重复问题 - John Saunders
6个回答

11
var xdoc = XDocument.Load(PATH_TO_FILE);
var companies = xdoc.Descendants("Company").Select(c => (string)c).ToArray();

这将给你一个 string[]


6
使用LINQ to XML,包含using System.Xml.Linq;
   XDocument xmlDoc = XDocument.Load("yourfile.xml");
   var test = xmlDoc.Descendants("Companies").Elements("Company").Select(r => r.Value).ToArray();
   string result = string.Join(",", test);

输出将是:

123,456,789


1
你可以直接使用.Descendants("Company")而不是.Descendants("Companies").Elements("Company") - Chuck Savage
1
@ChuckSavage,我只是想提供一个想法,上述语句也适用于您想要避免嵌套公司元素的情况,例如: <Company>123</Company> <otherinfo> <Company>子公司</Company> </otherinfo> - Habib
是的 - 昨天我处于一个紧急情况 - 对此很抱歉。 - Chuck Savage

4
在数据集中,您可以读取XML文件。
以下是读取DataSet中XML文件的代码行。
DataSet dsMenu = new DataSet(); //Create Dataset Object

dsMenu.ReadXml("XMLFILENAME.XML"); // Read XML file in Dataset

DataTable dtXMLFILE// Create DatyaTable object

dtXMLFILE= dsMenu.Tables[0]; // Store XML Data in Data Table 

3
var xmlStr=@"<MyFile> 
  <Companies> 
    <Company>123</Company> 
    <Company>456</Company>
    <Company>789</Company> 
  </Companies> 
</MyFile>";

var xDoc = XDocument.Parse(xmlStr);
var companyIds = xDoc.Descendants("Company").Select(e => (int)e);

@ChuckSavage 请仔细阅读...他们并没有明确要求。集合或字符串数组。按照布尔逻辑的规则,我满足了这个要求。将答案转化为字符串而不是整数并不需要天才。这样做不值得被踩。 - spender
OP 请求 "..." 或 string[]。如果你想要投票回来,我不能在答案被编辑之前改变反对票。你和我都知道,在语句末尾加上 .ToArray() 就可以将其转换为数组,但这就是 OP 请求的内容。目前,你的答案是一个 IEnumerable<int>,而不是一个 string[] - Chuck Savage

3
string pathToXmlFile = @"C:\test.xml";
XElement patternDoc = XElement.Load(pathToXmlFile);
List<string> values = new List<string>();
foreach (var element in patternDoc.Elements("Companies").Elements("Company"))
{
   values.Add(element.Value);
}

2

过去,我使用过XmlReader,没有遇到任何困难。

MSDN文档: http://msdn.microsoft.com/en-us/library/system.xml.xmlreader(v=vs.110).aspx

这非常简单,文档写得非常好。以下是如何快速演示它的方式:

XmlReader reader = XmlReader.Create(targetFile);

while (reader.Read())
{
    switch (reader.NodeType)
    {
        case XmlNodeType.Element:
            if (reader.Name.Equals("Company")
            {
                // Read the XML Node's attributes and add to string
            }
            break;
    }
}

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