在List<>中查找XmlElement使用匹配属性名称数组...使用Linq

时间:2011-06-02 09:26:51

标签: c# .net xml linq

我有一个包含多个属性的XmlElement

xeObject = <Object Name="Object1" Site="Site1" ... />

我还有一个包含多个(可能是不同的)属性的XmlElements列表

l_xeObject = <Object ... /><Object ... /> ... <Object ... />

我想要一个像

这样的函数调用
FindMatchingElements(xeObject, l_xeObject, "Name", "Site")

返回l_xeObject中与xeObject.Name和xeObject.Site具有相同值的任何元素!

我能用Linq做到吗?

......我已经拥有以下功能

public static List<XmlElement> GetXmlElementsFromListWithMatchingAttribute
    (XmlElement xeMatchOn, string sMatchingAttributeName, List<XmlElement> l_xeSearchIn)
{
    return (l_xeSearchIn
        .Where(xe => xe.Attributes[sMatchingAttributeName].Value
            == xeMatchOn.Attributes[sMatchingAttributeName].Value)
        ).ToList();
}

但它只使用一个属性。

感谢Frédéric提供了我需要的答案。

1 个答案:

答案 0 :(得分:3)

您可以使用All()来匹配多个属性和GetAttribute(),以避免检查null

public static IEnumerable<XmlElement> FindMatchingElements(XmlElement match,
    IEnumerable<XmlElement> elements, params string[] attributeNames)
{
    // Argument validation omitted for brevity.

    return elements.Where(
        element => attributeNames.All(
            name => element.GetAttribute(name) == match.GetAttribute(name)));
}

也就是说,如果您真的想要使用LINQ解析或生成XML标记,请考虑使用LINQ to XML而不是DOM类。