2016-06-01 92 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(); 

     } 
    } 
}