我不经常使用Linq来查询XML,而且我没有大量的XML经验。我想要做的是查询这个简单的XML文档...
<AlarmParameters>
<Parameter>
<ParameterName>ConsecutivePoints</ParameterName>
<Points>30</Points>
<AllowEdit>true</AllowEdit>
<Caption>Consecutive Points</Caption>
</Parameter>
<Parameter>
<ParameterName>SigmaCount</ParameterName>
<Count>1</Count>
<AllowEdit>true</AllowEdit>
<Caption>Number of Sigmas</Caption>
</Parameter>
</AlarmParameters>
...并生成一个“参数”类列表,每个类都包含XML示例中显示的属性。使用LinqPad,我已经设法做到这一点,但不知道如何完成这个。
string xmlFragment = "<AlarmParameters><Parameter><ParameterName>ConsecutivePoints</ParameterName><Points>30</Points><AllowEdit>true</AllowEdit><Caption>Consecutive Points</Caption></Parameter><Parameter><ParameterName>SigmaCount</ParameterName><Count>1</Count><AllowEdit>true</AllowEdit><Caption>Number of Sigmas</Caption></Parameter></AlarmParameters>";
StringReader strReader = new StringReader(xmlFragment);
XDocument xmlDoc = XDocument.Load(strReader);
var result = from parameter in xmlDoc (not sure what Linq to put here next)
答案 0 :(得分:3)
您可以在MSDN上找到LINQ to XML overview的一些好信息。以下是使用Descendants
运算符提取元素集合的一种方法,以及Element
运算符来提取集合中每个项目的子属性:
var result =
from parameter in xmlDoc.Descendants("Parameter")
select new {
ParameterName = (string) parameter.Element("ParameterName"),
Points = (int?) parameter.Element("Points") ?? 0,
Count = (int?) parameter.Element("Count") ?? 0,
AllowEdit = (bool) parameter.Element("AllowEdit"),
Caption = (string) parameter.Element("Caption")
};
这只是创建匿名类实例,但您可以用select new MyParameterClassName
替换参数类。