【问题标题】:How to read XML file in c#?如何在 C# 中读取 XML 文件?
【发布时间】:2012-06-27 11:20:56
【问题描述】:

我有以下 XML 文件,我想知道阅读此 XML 文件的最佳方式

<MyFile> 
  <Companies> 
    <Company>123</Company> 
    <Company>456</Company>
    <Company>789</Company> 
  </Companies> 
</MyFile>

作为输出,我需要像“123,456,789”这样的值的集合,或者它可以是字符串数组[]

我们可以使用 Linq to xml 吗?怎么样?

【问题讨论】:

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


【解决方案1】:
var xdoc = XDocument.Load(PATH_TO_FILE);
var companies = xdoc.Descendants("Company").Select(c => (string)c).ToArray();

这会给你一个string[]

【讨论】:

    【解决方案2】:

    使用 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

    【讨论】:

    • 你可以用.Descendants("Company")代替.Descendants("Companies").Elements("Company")
    • @ChuckSavage,我只是想给出一个想法,上面的语句也适用于您想要避免嵌套公司元素的地方,例如:123子公司
    • 是的 - 我昨天处于危急关头 - 抱歉。
    【解决方案3】:

    在数据集中你可以读取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 
    

    【讨论】:

      【解决方案4】:
      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 仔细阅读......他们实际上并没有明确说明该要求。 或字符串数​​组的集合。我通过布尔逻辑规则满足了这个要求。颠覆这个答案以产生字符串而不是整数并不需要天才。几乎不值得一票...
      • OP 请求“...”或字符串 []。如果您想要投票,在编辑答案之前我无法更改反对票。你和我都知道,只需要在你的语句末尾加上一个 .ToArray() 就可以使它成为一个数组,但这就是 OP 所要求的。照原样,您的答案是 IEnumerable&lt;int&gt;,它与 string[] 不同。
      【解决方案5】:
      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);
      }
      

      【讨论】:

        【解决方案6】:

        过去我用过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;
            }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-13
          • 1970-01-01
          相关资源
          最近更新 更多