xml - Excel vba 解析复杂 XML

标签 xml excel vba domdocument msxml2

我需要从 xml 文件中获取数据并将其加载到 Excel 工作表中。我能够加载 xml 文件并在消息框中获取元素数据。这将用 VBA for Excel 2013 编写

xml文件结构

<?xml version="1.0" encoding="utf-8" ?>
<Response >
    <Status>10</Status>
    <callMessage>Success.</callMessage>
    <PullR version="1">
        <responseStatus>1000</responseStatus>
        <responseMessage>Success.</responseMessage>
        <Options>
            <Option>
                <header>
                    <need1>text1</need1> ---- "COLUMN1"
                    <need2>
                        <![CDATA[text2]]>
                    </need2>  ---- "COLUMN2"
                    <need 3>this text3 together with need 2</need3>"COLUMN2"
                    <need4>
                        <![CDATA[Text4]]>
                    </need4> ---"COLUMN4"
                </header>
                <Details> - ""this one could be 1 to 10 child element (detail) this sample has 2 ""
                    <detail>
                        <need5>text5</need5>  " COLUMN5"
                        <need6>date6</need6>
                        <need7>time7</need7>
                        <need8>
                            <![CDATA[text8]]>
                        </need8>
                        </detail>
                    <detail> ---- ""this should be on second row in excel sheet ""
                        <need5>text5</need5> --- "COLUMN5 ROW +1"
                        <need6>date6</need6> ---- "COLUMN6 ROW +1"
                        <need7>time7</need7>
                        <need8>
                            <![CDATA[text8]]>
                        </need8>
                    </detail>
                </Details>
            </Option>
         </Options>
    </PullR>
</Response>

我减少了 xml 文件子元素还有更多,我被困在详细父元素部分,因为当它写入第二行时,它为下一个 Option 祖先元素写入了 need1。
单元格中的日期将是我输入的文本(原子值)字段,与 xml 文件中的完全相同。
Dim Options As IXMLDOMNodeList
Dim Option As IXMLDOMNode

Set Options = rosDoc.SelectNodes("/Response/PullR/Options/Option")

   For Each Option In Options

   MsgBox Trip.SelectNodes("header/need1").Item(0).Text
   MsgBox Trip.SelectNodes("Details/Detail/need5").Item(0).Text
   MsgBox Trip.SelectNodes("Details/Detail/need5").Item(1).Text
   Next

此代码完美运行,但需要 5 是可变的,大多数情况下有 2 个项目,但有时可能会有更多我将如何通过在选项中计算需要 5

最佳答案

VBA 支持 xpath .这是 imo 处理来自 xml 文件的数据的最简单方法。

下面是一些可以帮助您入门的示例代码:

Dim doc As DOMDocument
Set doc = New DOMDocument
doc.Load "C:\x.xml"
Dim Variables As IXMLDOMNodeList
Dim variable As IXMLDOMNode
Set Variables = doc.SelectNodes("/Environment/Variable")
    For Each variable In Variables
        Debug.Print variable.SelectNodes("Caption").Item(0).Text
        Debug.Print variable.SelectNodes("Type").Item(0).Text
    Next

关于xml - Excel vba 解析复杂 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43948915/

相关文章:

Excel VBA 发送短信到 Whatsapp

javascript - jQuery AJAX 函数调用多次,但仅在第一次调用时提取数据

C# 如何从 xml 文件中获取所有元素名称

.net - 具有动态内容区域的 XSLT 布局

vba - 如何获得自动过滤字段指示器以指示正确的列?

javascript - 如何使用 VBA 在 IE 上使用 Java 类型按钮

sql - 如何使用adodb编写sql查询来选择长度超过255个字符的数据

xml - 将 XML 文档中的数据解析为 Excel 工作表

arrays - 编译错误: ByRef arugment type mismatch: How to call a value in an array

excel - 使用命名范围循环工作表