You need to enable JavaScript to run this app. Excel中CustomXmlPart读取XML数据时遍历节点异常问题求助
优惠活动
大模型
产品
解决方案
定价
更多

Excel中CustomXmlPart读取XML数据时遍历节点异常问题求助

问题核心原因

你观察到的#text节点是XML解析的标准行为:默认配置下,XML解析器会把标签之间的换行、缩进空格等空白字符识别为独立的文本节点,所以你统计到的5个节点实际是「空白文本节点 + Kitten节点 + 空白文本节点 + Kitten节点 + 空白文本节点」的组合,和你猜测的vbCrLf原因完全一致。
不需要放弃现有CustomXMLParts方案,按以下标准方案处理即可:

标准处理方案

方案1:直接用XPath查询目标节点(最推荐)

不需要遍历根节点的所有子节点,直接用XPath精准匹配你需要的Kitten元素,查询结果会自动排除空白文本节点:

' 你已经拿到matchedXmlPart后直接执行
Dim kittenNodes As CustomXMLNodes, kitten As CustomXMLNode
Set kittenNodes = matchedXmlPart.SelectNodes("//Kittens/Kitten")

' 遍历即可直接得到所有Kitten节点,不会包含空白文本节点
For Each kitten In kittenNodes
    Dim name As String, age As Integer
    name = kitten.SelectSingleNode("Name").Text
    age = CInt(kitten.SelectSingleNode("Age").Text)
    ' 这里可以把数据存入字典等结构
Next

方案2:遍历节点时过滤元素类型

如果确实需要遍历根节点的所有子节点,可以通过节点类型过滤,仅保留元素节点(元素节点的NodeType值为1,文本节点值为3),比过滤BaseName更严谨:

Dim childNode As CustomXMLNode
For Each childNode In matchedXmlPart.DocumentElement.ChildNodes
    ' 仅处理元素节点,跳过文本、注释等其他类型节点
    If childNode.NodeType = 1 Then
        ' 这里处理Kitten节点逻辑
    End If
Next

方案3:加载XML时直接忽略空白节点

如果你是自行构造XML写入CustomXMLParts,或者可以拿到原始XML字符串重新加载,可以在初始化DOM对象时设置不保留空白,从根源上避免生成多余的文本节点:

Dim xmlDoc As Object
Set xmlDoc = CreateObject("MSXML2.DOMDocument.6.0")
xmlDoc.preserveWhiteSpace = False ' 核心配置,自动忽略标签间的空白
xmlDoc.LoadXML "你的原始XML字符串"
' 后续处理时ChildNodes就只会包含元素节点

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 03:36:02