You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Solarwinds API节点选择返回0条数据问题求助

问题分析与解决方案

咱们先拆解你遇到的两个核心问题:SelectNodes返回0条节点,以及代码逻辑判断的小问题,结合你怀疑的编码问题逐一解决。

1. 编码不匹配:XML解析的隐性坑

你的XML声明明确标注了ISO-8859-1编码,但如果AppShared.LoadXMLDocument方法默认用UTF-8加载内容,就会出现编码不匹配,导致XML解析时出现隐性错误,最终节点无法被正确识别(这大概率是节点数为0的核心原因)。

修复方案:明确指定编码加载XML

替换原有的加载逻辑,手动指定编码为ISO-8859-1来获取并解析XML:

Dim myFeed As New XmlDocument()
Using webClient As New WebClient()
    ' 强制匹配XML声明的ISO-8859-1编码
    webClient.Encoding = Encoding.GetEncoding("ISO-8859-1")
    Dim xmlContent As String = webClient.DownloadString(feedURL)
    myFeed.LoadXml(xmlContent)
End Using

2. 代码逻辑的两个细节问题

(1)XmlNodeList永远不会为Nothing

你用If Not IsNothing(myFeed.SelectNodes("//client")) Then的判断是无效的——SelectNodes哪怕没匹配到任何节点,也会返回一个Count为0的XmlNodeList,永远不会是Nothing。这就是为什么你总是看到"Has 0 items"而不是"No Client Nodes"。

正确的判断应该直接检查节点数量:

myXMLNodeList = myFeed.SelectNodes("//client")
If myXMLNodeList.Count > 0 Then
    Console.WriteLine("Has " & myXMLNodeList.Count & " items")
    ' 后续节点处理逻辑
Else
    Console.WriteLine("No Client Nodes.")
End If

(2)XML大小写敏感+相对路径错误

你的XML里的节点是<clientid>(全小写),但代码里写的是SelectSingleNode("//clientID")(大小写混合)——XML是严格区分大小写的,这会导致后续获取节点值失败。另外,循环里用//client是全局搜索,应该用相对当前节点的路径:

修改循环内的代码:

For Each currentXMLNode As XmlNode In myXMLNodeList
    Console.WriteLine("Processing row...")
    ' 用相对路径找当前client节点下的clientid,注意大小写完全匹配
    rmmClientID = Integer.Parse(currentXMLNode.SelectSingleNode("clientid").Value)
    Console.WriteLine("ClientID: " & rmmClientID)
    ' 其他字段同理:比如workstation_count对应XML里的<workstation_count>
    workstationCount = Integer.Parse(currentXMLNode.SelectSingleNode("workstation_count").Value)
Next

总结修复顺序

  1. 先解决编码问题,确保XML被正确解析;
  2. 调整节点存在性的判断逻辑;
  3. 修正XML节点的大小写匹配问题,使用相对路径获取子节点。

按这个顺序修改后,应该就能正常获取到client节点了。

内容的提问来源于stack exchange,提问作者David Arnold

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 10:37:38