VBA函数读取XML节点

时间:2015-07-08 15:10:32

标签: arrays xml excel vba excel-vba

我对使用XML非常陌生,并且想知道是否有人可以帮助我入门?

我正在尝试编写一个VBA函数,它可以输出一个只包含List Names的数组[即数组(" Recon"," Safety"," Performance&#34) )]。

我还需要具有输出数组的功能,只需要一个特定的" To"节点的文字。例如,我可以调用该函数来提取参考Recon列表的CC的名称[即数组(" Jane"," Ashley")或数组("简;阿什利;") - 无论哪种输出对我来说都是最有意义的)

另外,如果有更好的方法来构建这个XML,我会接受改变,因为我从头开始编写这个,我的VBA用户表最终会创建并修改这个文件。

<?xml version="1.0" encoding="utf-8"?>
<Settings>
<DistributionLists>
    <List>
        <Name>Recon</Name>
        <TO>John;Bob;Rob;Chris;</TO>
        <CC>Jane;Ashley;</CC>
        <BCC>Brent;</BCC>
    </List>
    <List>
        <Name>Safety Metrics</Name>
        <TO></TO>
        <CC></CC>
        <BCC></BCC>
    </List>
    <List>
        <Name>Performance Report</Name>
        <TO></TO>
        <CC></CC>
        <BCC></BCC>
    </List>
</DistributionLists>

<Presets>
</Presets>

</Settings>

1 个答案:

答案 0 :(得分:1)

以下是获取To数组的示例。获得其他阵列/节点的良好起点。

Function GetToArr()
    Dim XDoc As Object
    Dim xEmpDetails As Object
    Dim xEmployee As Object
    Dim xChild As Object

    Set XDoc = CreateObject("MSXML2.DOMDocument")
    XDoc.async = False
    XDoc.validateOnParse = False
    XDoc.Load ("C:\[path]\test.xml")
    Set items = XDoc.DocumentElement
    Set Item = items.ChildNodes(0)
    Set Item = Item.FirstChild
    Set Item = Item.ChildNodes(1)
    GetToArr = Split(Item.Text, ";")
End Function

Sub TestGetToArr()
    For Each it In GetToArr()
        Debug.Print it
    Next it
End Sub

结果:

John
Bob
Rob
Chris