如何使用Linq读取XML
本文关键字:XML 读取 Linq 何使用 | 更新日期: 2023-09-27 18:09:32
我有一个查询数据库并报告结果的程序。以下是我的查询:
Select Service, Total
From Services
Where dtcreated between @startdate and @enddate
名为dataset
的数据集将此报告给reportviewer1
我有一个xml文件这是xml文件:
<?xml version="1.0" encoding="utf-8"?>
<!--XML Database.-->
<config>
<goals>
<service1>4</service1>
<service2>3</service2>
</goals>
</config>
xml(位置C:'config.xml
)向Reportviewer2
报告
我想做的是通过电子邮件发送查询结果,以及xml文件中服务目标的值。我能够使用LINQ把表放在一起,通过电子邮件从数据集我的代码如下:
Dim xelement As XElement = xelement.Load("C:'Config.xml")
Dim employees As IEnumerable(Of XElement) = xelement.Elements()
Dim test = _
<html><body><table><tr><th>Service</th><th>Total Sold</th><th>Goals</th></tr>
<%= From service In Me.Dataset.datatable.AsEnumerable _
Select <tr><td><%= service.Service_Category.ToString %></td>
<td><%= service.Total_Sold.ToString %></td>
<%= From XMLFile In xelement.Descendants("goals").AsEnumerable _
Select <td><%= XMLFile.Descendants("goals").Value %></td> %></tr> %>
</table></body></html>
现在我要做的是在同一个表中包含要在上面数据构建的第三列中报告的XML文件的值。第三列,你可以看到,我希望是"目标",它应该显示4,然后3根据我的配置文件。我怎么能包括我的xml文件的值在Linq和HTML上面构建?下面是我当前的输出:
Service Total Sold Goals
Service1 51
Service2 12
正如你所看到的,我从配置文件中缺少了"4"answers"3"。
下面是我想要的输出:
Service Total Sold Goals
Service1 51 4
Service2 12 3
您可以使用Linq to XML with(希望已经存在一个对象,或者您可以创建一个对象)来完成此操作,使用linqpad来正确地获取查询。
获取xml文档 的代码 private static XDocument GetXmlDataFromFileName(string fileName)
{
// read the xml file into memory
return XDocument.Load(new FileStream(String.Format(@"C:'<some path>'{0}.xml", fileName), FileMode.Open));
}
方法扩展到。value,所以它不需要修剪结果,但我使用它来处理末尾的空格,或者如果值不存在,则为空字符串。
public static class XmlExtensions
{
public static String ValueTrim(this XElement element)
{
return element != null ? element.Value.Trim() : "";
}
}
将xml数据读入对象
的代码 // read the xml file into memory
var doc = GetXmlDataFromFileName("FormsPersistence");
var data = (from attrib in doc.Descendants("FormsPersistenceDs").Descendants("Properties")
select new FormsPersistence
{
Id = Guid.NewGuid(),
FormName = attrib.Element("FormName").ValueTrim(),
ControlName = attrib.Element("ControlName").ValueTrim(),
Property = attrib.Element("Property").ValueTrim(),
PropertyValue = attrib.Element("PropertyValue").ValueTrim()
}).ToList();
文件模板
<?xml version="1.0" standalone="yes"?>
<FormsPersistenceDs>
<Properties>
<FormName>Form1</FormName>
<ControlName>mainNaviBar</ControlName>
<Property>Width</Property>
<PropertyValue>275</PropertyValue>
</Properties>
</FormsPersistenceDs>