如何提高VBA中XML解析的速度
我有一个需要在VBA中解析的大型XML文件(excel 2003& 2007)。 xml文件中可能存在超过11,000个“行”数据,每个“行”具有10到20个列之间的数据。这最终只是一个庞大的任务,只需解析并获取数据(5 - 7分钟)。我尝试读取xml并将每个'row'放入字典(key =行号,值=行属性),但这需要同样长的时间。
遍历DOM需要永远。有更有效的方法吗?
Dim XMLDict
Sub ParseXML(ByRef RootNode As IXMLDOMNode)
Dim Counter As Long
Dim RowList As IXMLDOMNodeList
Dim ColumnList As IXMLDOMNodeList
Dim RowNode As IXMLDOMNode
Dim ColumnNode As IXMLDOMNode
Counter = 1
Set RowList = RootNode.SelectNodes("Row")
For Each RowNode In RowList
Set ColumnList = RowNode.SelectNodes("Col")
Dim NodeValues As String
For Each ColumnNode In ColumnList
NodeValues = NodeValues & "|" & ColumnNode.Attributes.getNamedItem("id").Text & ":" & ColumnNode.Text
Next ColumnNode
XMLDICT.Add Counter, NodeValues
Counter = Counter + 1
Next RowNode
End Sub
没有找到相关结果
已邀请:
2 个回复
呸溉
输出: 通过工具>参考添加对“Microsoft XML,v6.0”的引用 在普通模块中添加此代码
添加一个类模块,将其命名为
并添加以下代码
使用模块顶部的左侧下拉菜单选择“IVBSAXContentHandler”,然后使用右侧下拉菜单依次为每个事件添加存根(从
到
) 将代码添加到某些存根中,如下所示 明确设置计数器和标志,以显示我们是否要在此时读取文本数据
每次启动新元素时,请检查元素的名称并采取适当的操作
检查我们是否对文本数据感兴趣,如果是的话,请删除任何无关的空格并删除所有换行符(根据您要解析的文档,这可能是也可能不可取)
如果我们已达到
的末尾,则停止阅读文本值;如果我们到达了
的末尾,则打印出节点值的字符串
为了使事情更清楚,这里是
的完整版本,其中包含了存根方法:
死狸蔽垂藐
功能。这将允许您基于模式匹配搜索节点。 例如,我创建了以下函数:
现在,如果我有以下XML文件: 我可以简单地打电话:
它将跳转到任何深度的第一个名为“错误状态”的键,然后拉出“源”节点中的文本 - 返回“INTEGRATION”