如何在XML DOM节点树中确定元素结尾

时间:2017-01-10 03:38:19

标签: xml vba dom

我会添加到以下主题,但这将违反论坛规则“但请避免寻求帮助”。 how to identify for the xml end tag while parsing using DOM?

上面的帖子中的问题也是我的。另一种方法是知道如何捕获“GroupName”以及该组内的每一个都绕过<历史> < /历史与GT;

我正在使用Excel 2016 VBA。 KeePass XML没有已知的架构。

下面列出了一个由KeePass XML文件的高级元素组成的简单节点树,以提供一些清晰度。为简单起见,忽略了条目细节(子节点)和大多数节点。

<KeePassFile>
   <Root>
      <Group>
         <Group>
            <Name>GroupName</Name>
            <Entry>
               <History>
                  <Entry>
                  </Entry>
                  <Entry>
                  </Entry>
               </History>
            </Entry>
            <Entry>
            </Entry>
         </Group>
      </Group>
      <DeletedObjects />
   </Root>
</KeePassFile>

我尝试的原因是使用Excel VBA和XML DOM库将KeePass XML文件加载到Excel中。似乎没有架构,并且各种“级别”使用相同的节点E.G.我尝试使用XPath但无处可去。 getElementsByTagName看起来很有前途,甚至可以用于两个元素,但是当完成第二个条目时,parent.nextsibliing就陷入了困境。

由于&lt;之间没有任何信息。历史和GT;&LT; /历史与GT;希望我可以确定下一个兄弟和父母的下一个兄弟,并使用所达到的两个节点中的第一个来“确定”结束。

我还可以假设紧跟着&lt; /条目&GT;已知并使用它们。我知道&lt;输入&gt;,&lt;历史&gt;,和&lt; DeletedObjects&GT;但是,其他人可能存在。

1 个答案:

答案 0 :(得分:0)

DOM是数据的树级视图。此树中的元素节点对应于开始标记/结束标记对,节点的子节点表示在开始标记和结束标记之间找到的所有内容。因此,在DOM(或其他更现代的树模型)中没有单独的开始标记和结束标记的表示:两个标记被折叠成单个节点对象。 (这可能解释了为什么这么多人滥用“标签”这个词来表示“元素节点”)。

如果要忽略history元素,只需忽略元素节点,就不必担心开始和结束标记。