VB.NET中使用LINQ to XML搜索val值并获取对应catalog及val属性的方法
问题分析
你的原有代码存在3个核心错误:
c.Elements("val").Value写法获取的是当前catalog下所有val节点的文本拼接结果,无法精准匹配单个val节点的文本- 查询维度错误,应该以val节点为查询起点,而非catalog节点,这样才能直接拿到符合条件的val的index属性,再向上获取所属catalog的name属性
- 声明的返回类型
IEnumerable(Of XElement)和实际Select返回的字符串类型不匹配,会触发类型错误
修正后的可运行代码
Dim xml_Doc = XDocument.Load(Path.Combine(myPath, "list.Xml")) Dim targetKeyword As String = "sample text 1" ' 直接遍历所有val节点匹配关键词 Dim search_result = From v In xml_Doc.Descendants("val") Where v.Value.Contains(targetKeyword) Let parentCatalog = v.Parent ' 取当前val所属的catalog节点 Select $"index:{v.Attribute("index").Value} , name: {parentCatalog.Attribute("name").Value}" ' 输出结果 For Each line In search_result Console.WriteLine(line) Next
运行后会直接输出你需要的格式:
index:1 , name: n1 index:4 , name: n2
补充说明
- 用
Path.Combine拼接文件路径比直接用&拼接更稳妥,可避免路径多斜杠/缺斜杠的异常 - 如果需要区分大小写匹配,可在Contains方法里传入
StringComparison参数调整匹配规则
内容的提问来源于stack exchange,提问作者ha a
相关产品推荐
相关产品推荐

