2016-06-01 77 views
-1

如何在ASP.net程序的根目录中的以前生成的文件中使用LINQ读取XML文件(XMLfile.xml)。每个元素都存在于我已创建的XML文件中(请参阅下面的摘录)。使用LINQ读取XML文件

 XDocument xmlElements = XDocument.Parse(System.IO.File.ReadAllText(Server.MapPath("XMLfile.xml"))); 

     var elements = from data in xmlElements.Descendants("/NewDataSet/Table") 
      select new 
      { 
       Number0 = (int)data.Element("Number"), 
       Name0 = (string)data.Element("Name"), 
       a0 = (double)data.Element("a"), 
       e0 = (double)data.Element("e"), 
       i0 = (double)data.Element("i"), 
       N0 = (double)data.Element("N"), 
       w0 = (double)data.Element("w"), 
       Pyrs0 = (double)data.Element("Pyrs"), 
       mm0 = (double)data.Element("mm"), 
       MA0 = (double)data.Element("MA0") 
      }; 

     foreach (var element in elements) 
     { 
      m = m + 1; 
      num[m] = element.Number0; 
      nam[m] = element.Name0; 
      a1[m] = element.a0; 
      ecc[m] = element.e0; 
      i[m] = element.i0; 
      N[m] = element.N0; 
      w[m] = element.w0; 
      Pyrs[m] = element.Pyrs0; 
      mm[m] = element.mm0; 
      MA0[m] = element.MA0; 
     } 

XMLfile.xml

<?xml version="1.0" standalone="yes"?> 
<NewDataSet> 
    <Table> 
     <Number>1</Number> 
     <Name>Ceres</Name> 
     <a>2.7681117</a> 
     <e>0.0757544</e> 
     <i>10.59166</I> 
     <N>80.3218024</N> 
     <w>72.73324</w> 
     <Pyrs>4.61</Pyrs> 
     <mm>0.2140072</mm> 
     <MA0>181.38143</MA0> 
    </Table> 
    <Table> 
     <Number>2</Number> 
     <Name>Pallas</Name> 
     <a>2.7723622</a> 
     <e>0.2310236</e> 
     <i>34.84095</i> 
     <N>173.0882785</N> 
     <w>309.98943</w> 
     <Pyrs>4.62</Pyrs> 
     <mm>0.2135153</mm> 
     <MA0>163.60434</MA0> 
    </Table> 
    ... 
    </NewDataSet> 
+1

请解释您的问题,您只是粘贴了您的代码,但没有说明如果您有任何问题。 – Gusman

+1

XDocument xDoc = XDocument.Load(Server.MapPath(“XMLFile.xml”)); – Hakunamatata

+0

System.Xml.dll中发生类型'System.Xml.XmlException'的异常,但未在用户代码中处理 附加信息:名称不能以'/'字符开头,十六进制值为0x2F。 – losopha

回答

0

了什么工作对我来说是扩展方法XPathSelectElements。如:

var elements = from data in xmlElements.XPathSelectElements("/NewDataSet/Table") 
    select new 
    { 
     Number0 = (int)data.Element("Number"), 
     Name0 = (string)data.Element("Name"), 
     a0 = (double)data.Element("a"), 
     e0 = (double)data.Element("e"), 
     i0 = (double)data.Element("i"), 
     N0 = (double)data.Element("N"), 
     w0 = (double)data.Element("w"), 
     Pyrs0 = (double)data.Element("Pyrs"), 
     mm0 = (double)data.Element("mm"), 
     MA0 = (double)data.Element("MA0") 
    }; 
0

下面的代码是XML Linq,就像您请求的一样。 XML区分大小写,因此您需要将结束标记“I”更改为“i”。我测试了下面的代码,它的工作原理。如果你有一个字符串而不是文件,那么将“Load”改为“Parse”。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Xml; 
using System.Xml.Linq; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     const string FILENAME = @"c:\temp\test.xml"; 
     static void Main(string[] args) 
     { 
      XDocument doc = XDocument.Load(FILENAME); 

      var results = doc.Descendants("Table").Select(x => new 
      { 
       number = (int)x.Element("Number"), 
       name = (string)x.Element("Name"), 
       a = (double)x.Element("a"), 
       e = (double)x.Element("e"), 
       i = (double)x.Element("i"), 
       n = (double)x.Element("N"), 
       w = (double)x.Element("w"), 
       pyrs = (double)x.Element("Pyrs"), 
       mm = (double)x.Element("mm"), 
       ma0 = (double)x.Element("MA0") 
      }).ToList(); 

     } 
    } 
}