gpt4 book ai didi

c# - 如何使用 Linq 读取 XML

转载 作者:太空宇宙 更新时间:2023-11-03 11:05:25 25 4
gpt4 key购买 nike

我有一个查询数据库并报告结果的程序。这是我的查询:

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 文件的值,以在上面数据构建的第 3 列中报告。如您所见,第三列我想成为“目标”,它应该显示 4,然后根据我的配置文件显示 3。如何在上面的 Linq 和 HTML 构建中包含我的 xml 文件的值?这是我当前的输出:

Service Total Sold  Goals
Service1 51
Service2 12

如您所见,我在配置文件中遗漏了“4”和“3”。

这是我希望输出的样子:

Service Total Sold  Goals
Service1 51 4
Service2 12 3

最佳答案

您可以使用 Linq to XML 完成此操作(希望对象已经存在,或者您可以创建一个),使用 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>

关于c# - 如何使用 Linq 读取 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16038168/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com