我正在将XML加载到XMLDocument中。
以下是其结构:
<REPORT id="Loan" version="20120710160558">
<FILE id="Loan_20120710">
<INDEX NAME="Amount" VALUE="45000" PAGE="1"/>
<INDEX NAME="Amount" VALUE="20000" PAGE="2"/>
<INDEX NAME="Amount" VALUE="32494" PAGE="3"/>
<INDEX NAME="Name" VALUE="Christie" PAGE="1"/>
<INDEX NAME="Name" VALUE="Christie" PAGE="2"/>
<INDEX NAME="Name" VALUE="Christie" PAGE="3"/>
<INDEX NAME="Date" VALUE="02082012" PAGE="1"/>
<INDEX NAME="Date" VALUE="02082012" PAGE="2"/>
<INDEX NAME="Date" VALUE="02082012" PAGE="3"/>
</FILE>
<FILE id="Loan_20120712">
<INDEX NAME="Amount" VALUE="34984" PAGE="1"/>
<INDEX NAME="Amount" VALUE="34984" PAGE="2"/>
<INDEX NAME="Amount" VALUE="34984" PAGE="3"/>
<INDEX NAME="Name" VALUE="Charles" PAGE="1"/>
<INDEX NAME="Name" VALUE="Charles" PAGE="2"/>
<INDEX NAME="Name" VALUE="Charles" PAGE="3"/>
<INDEX NAME="Date" VALUE="03082012" PAGE="1"/>
<INDEX NAME="Date" VALUE="03082012" PAGE="2"/>
<INDEX NAME="Date" VALUE="03082012" PAGE="3"/>
</FILE>
</REPORT>
我正在尝试使用以下LINQ查询:
XmlDocument doc = new XmlDocument();
doc.Load(XMLFile);
var query = from xml in xdoc.Descendants("File")
select new
{
Amount = (string)xml.Element("Amount"),
Name = (string)xml.Element("Name"),
Date = (string)xml.Element("Date")
};
我在上述查询时遇到错误。
我想使用LINQ查询来获取Amount,Name和contract的值,以便我在数据库中更新?
答案 0 :(得分:3)
试试这个:
var doc= XDocument.Load(filePath);
var query = from file in doc.Element("REPORT").Elements("FILE")
from index in file.Elements("INDEX")
select new
{
File = file.Attribute("id").Value,
Name = index.Attribute("NAME").Value,
Value = index.Attribute("VALUE").Value,
Page = Int32.Parse(index.Attribute("PAGE").Value)
};
然后,如果您想转动列表:
var pivotQuery = query.GroupBy(p => new {p.File, p.Page}).Select(g => new
{
File = g.Key.File,
Page = g.Key.Page,
Amount = g.Where(p => p.Name == "Amount").First().Value,
Name = g.Where(p => p.Name == "Name").First().Value,
Date = g.Where(p => p.Name == "Date").First().Value
});
如果您愿意,也可以将这些查询合并为一个。