我有一个包含多个属性的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提供了我需要的答案。
答案 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类。