使用Linq查询XML文档

时间:2012-04-23 17:21:21

标签: xml linq

我不经常使用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)

1 个答案:

答案 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替换参数类。