VB.NET XML查询中如何用Equals()匹配多个属性值?
VB.NET 检索name属性为"Source"或"Input"的节点解决方案
你原来的代码之所以失败,是因为把单个字符串和字符串数组直接用Equals比较——类型不匹配,永远返回False,自然找不到目标节点。下面给你两种可行的解决办法:
方法一:利用数组的Contains方法(适合选项较多的场景)
先定义目标值数组,然后在Lambda表达式里判断节点的name属性值是否在数组中,同时要先判断属性是否存在,避免空引用异常:
Dim cases As String() = {"Source", "Input"} Dim mycol = xml.First(Function(x) Dim nameAttr = x.Attribute("name") Return nameAttr IsNot Nothing AndAlso cases.Contains(CStr(nameAttr)) End Function)
方法二:直接用OrElse拼接条件(适合选项较少的场景)
如果只需要匹配两三个值,直接写逻辑或条件更直观:
Dim mycol = xml.First(Function(x) Dim nameAttr = x.Attribute("name") Return nameAttr IsNot Nothing AndAlso (CStr(nameAttr) = "Source" OrElse CStr(nameAttr) = "Input") End Function)
额外提醒
- 如果不确定是否存在符合条件的节点,建议用
FirstOrDefault代替First,这样找不到节点时会返回Nothing,不会抛出异常; - 如果需要获取所有符合条件的节点,把
First换成Where即可,返回的是节点集合。
内容的提问来源于stack exchange,提问作者legends1337
相关产品推荐
相关产品推荐

