正在向我提供以下XML,但无法更改其结构:
<ReportSpec>
<Report ReportName="ReportName1" FilterMode="Container" Destination="EmailToUser:LoggedInUser" Format="PDF" AlertSource="ALL" CriticalStatus="True">
<Filter Students="ALL" />
</Report>
<Report ReportName="ReportName1" FilterMode="Container" Destination="EmailToUserGroup:UserAdmins" Format="PDF" AlertSource="ALL" CriticalStatus="False">
<Filter TestScore="1234" />
</Report>
<Report ReportName="ReportName1" FilterMode="Container" Destination="Dir:\\net.path.com\reports" Format="PDF" AlertSource="Failing">
<Filter Grade="ALL" />
</Report>
<Report ReportName="ReportName1" FilterMode="Container" Destination="EmailTo:[email protected],[email protected]" Format="PDF" AlertSource="Failing">
<Filter Course="Programming" />
</Report>
</ReportSpec>
我正在使用C#(.NET 4.5),并且需要选择<FILTER>
元素的属性名称和值,因为它们稍后将在代码中成为应用程序逻辑的一部分(也就是说,我想TestScore="1234"
作为一个完整的字符串进行收集,并且稍后使用)。我目前正在使用XMLSerializer
并StreamReader
加载XML文档(但是如果需要,我愿意更改我的方法)。我已经PASTE SPECIAL --> XML to Classes
在Visual Studio 2013中完成了,但是创建的Filters类不允许我对foreach
元素执行。可以做到吗,如何做到?
您可以使用XmlDocument类
using System;
using System.IO;
using System.Xml;
namespace ConsoleApplication1 {
class Program {
static void Main(string[] args) {
var file = File.ReadAllText("c:\\temp\\file.xml");
var xmlFile = new XmlDocument();
xmlFile.LoadXml(file);
var filterElements = xmlFile.GetElementsByTagName("Filter");
foreach (XmlNode filterNode in filterElements) {
var filterName = filterNode.Attributes[0].Name;
var filterText = filterNode.Attributes[0].InnerXml;
var destination = filterNode.ParentNode.Attributes["Destination"].InnerText;
var message = string.Format("the destination {0} will filter {1} by {2}", destination, filterName, filterText);
Console.WriteLine(message);
}
Console.ReadKey();
}
}
输出将是:
目的地EmailToUser:LoggedInUser将按ALL过滤学生
目标EmailToUserGroup:UserAdmins将通过1234过滤TestScore
目的地Dir:\ net.path.com \ reports将按ALL过滤Grade
目的地EmailTo:a @ b.com,joe @ schmoe.com将通过编程过滤课程
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句