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
相关产品推荐
相关产品推荐

