使用LINQ读取XML文件
问题描述:
如何在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>
答
了什么工作对我来说是扩展方法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")
};
答
下面的代码是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();
}
}
}
请解释您的问题,您只是粘贴了您的代码,但没有说明如果您有任何问题。 – Gusman
XDocument xDoc = XDocument.Load(Server.MapPath(“XMLFile.xml”)); – Hakunamatata
System.Xml.dll中发生类型'System.Xml.XmlException'的异常,但未在用户代码中处理 附加信息:名称不能以'/'字符开头,十六进制值为0x2F。 – losopha