在VBA中获取XML的所有节点

在VBA中获取XML的所有节点,xml,vba,dom,Xml,Vba,Dom,首先也是最重要的一点,如果我在XML文件的命名法上犯了错误,我很抱歉!假设我在XML文件中有以下语法: <book id="bk101"> <author>Gambardella, Matthew</author> <title>XML Developer's Guide</title> <genre>Computer</genre> <price>44.95</price>

首先也是最重要的一点,如果我在XML文件的命名法上犯了错误,我很抱歉!假设我在XML文件中有以下语法:

<book id="bk101">
  <author>Gambardella, Matthew</author>
  <title>XML Developer's Guide</title>
  <genre>Computer</genre>
  <price>44.95</price>
  <publish_date>2000-10-01</publish_date>
  <description>An in-depth look at creating applications 
  with XML.</description>
</book>
<book id="bk102">
  <author>Ralls, Kim</author>
  <title>Midnight Rain</title>
  <genre>Fantasy</genre>
  <price>5.95</price>
  <publish_date>2000-12-16</publish_date>
  <description>A former architect battles corporate zombies, 
  an evil sorceress, and her own childhood to become queen 
  of the world.</description>
</book>

马修·甘巴德拉
XML开发人员指南
电脑类
44.95
2000-10-01
深入了解如何创建应用程序
使用XML。
拉尔斯,金
夜雨
幻想
5.95
2000-12-16
一位前建筑师与企业僵尸搏斗,
一个邪恶的女巫,和她自己的童年成为女王
世界的一部分。
等等

但是,有些书有额外的节点,如

我希望将XML文件中的所有书籍转换为列,每行一本。 我已经尝试获取书籍的所有节点值,但是由于缺少一些
节点,我无法使用simple For循环,因为“price”节点的数量不同,而
节点的数量也不同

我认为最好是把所有的书循环一遍,然后取各个节点的值。然而,我不知道这可能是什么正确的功能


谢谢

我选择性地将
publisher
preorder
cover
属性添加到典型的XML代码中,因此测试代码如下所示:



这种方法使用的字典对于大型XML数据来说可能非常慢,因此最好重新编写代码以使用数组而不是字典。

我的建议是循环遍历所有顶级XML节点(
book
节点)首先,创建一个包含所有可能的子节点的字典——基本上是创建一组超级节点,这些节点将成为表的列。然后开始第二次遍历列表,并将每个book节点的数据添加到相应的列中。您可以通过将任何新遇到的子节点作为新列添加到现有数据的右侧,一次完成此操作。主要问题是,我不知道如何在book节点上循环,因为我不知道适当选择器的正确语法,也不知道如何使用VBA处理XML对象等等。。我在网上找不到这样的信息。看看。它完全符合您的要求。您使用的是什么MS Office应用程序?如果Excel或Access都有XML导入模块。谢谢PeterT!设法让它工作起来,仍然有点困惑于VBA中的XML DOM,但现在它正在做我需要它做的事情!广告冻糕:我用的是Excel