使用 vb6 单独批量处理 xml

问题描述 投票:0回答:2

我下载了一个 xml 文件,其中有几个重复的主节点,如何使用 vb6 将这些节点分离到不同的 xml 文件中。

这是我正在使用的 xml 示例:

<produto>
   <item>
    <codigo>001</codigo>
    <qtde>1</qtde>
   </item>
</produto>

<produto>
   <item>
    <codigo>002</codigo>
    <qtde>33</qtde>
   </item>
</produto>

<produto>
   <item>
    <codigo>004</codigo>
    <qtde>10</qtde>
   </item>
</produto>

<produto>
   <item>
    <codigo>005</codigo>
    <qtde>6</qtde>
   </item>
</produto>

我尝试使用以下代码:

Dim xmldoc As New MSXML2.DOMDocument
Dim noList As MSXML2.IXMLDOMNodeList
Dim node As MSXML2.IXMLDOMNode


xmldoc.loadXML("C:\\test.xml")

Set noList = xmldoc.getElementsByTagName("produto")
For i = 0 To noList.length - 1
    '
    Set node = noList.Item(i)
    xmldoc.loadXML node.nodeValue

    strFile = "Arq_" & i & ".xml"

    node.Save strFile
    '
Next

但是线路出现错误:

Set noList = xmldoc.getElementsByTagName("produto")

xml vb6
2个回答
0
投票

正如已经提到的,这不是一个格式良好的 XML 文件,缺少根节点。您的 XML 当前有 4 个路由节点

produto

因此插入一个根节点,例如

<?xml version="1.0"?>
<root>
    <produto>
         <item>
            <codigo>001</codigo>
            <qtde>1</qtde>
         </item>
    </produto>
    <produto>
         <item>
            <codigo>002</codigo>
            <qtde>33</qtde>
         </item>
    </produto>
    <produto>
         <item>
            <codigo>004</codigo>
            <qtde>10</qtde>
         </item>
    </produto>
    <produto>
         <item>
            <codigo>005</codigo>
            <qtde>6</qtde>
         </item>
    </produto>
</root>

我个人也更喜欢

.selectNodes()
而不是
.getElementsByTagName()
。它使用 XPath 表达式,让您可以更好地控制所选元素。不是在这个特定的例子中,而是在一般情况下。例如。对于上面的例子

Set noList = xmldoc.selectNodes("//root/produto")

0
投票

您的代码存在许多问题。

  1. 如上所述,您必须将根节点添加到 xml 文件中。
  2. 加载下载的文件时需要使用
    xmldoc.Load
  3. 加载新文档时需要使用
    node.xml
  4. 保存新文档时需要使用
    xmldoc.save

完成这些更改后,代码如下所示:

xmldoc.Load "C:\test.xml"
Set noList = xmldoc.getElementsByTagName("produto")

For i = 0 To noList.length - 1
   Set node = noList.Item(i)
   xmldoc.loadXML node.xml

   strFile = "Arq_" & i & ".xml"

   xmldoc.save strFile
Next
© www.soinside.com 2019 - 2024. All rights reserved.