2

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

1 回答 1

3

您可以在 MSDN上的LINQ to XML 概述中找到一些很好的信息。这是一种方法,可以使用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为您的参数类。

于 2012-04-23T17:36:26.847 回答