2015-12-18 34 views
0

我必须将XMLnodelists合并为一个。 所以我想oNodelist_B的内容复制到oNodeList_A在VBA中合并两个XMLnodelist

Set oNodeList_A = xmldoc.getElementsByTagName("A") 
Set oNodeList_B = xmldoc.getElementsByTagName("B") 

人有一个想法?

+1

什么是最终的目的是什么?你想对这个联合清单做什么? –

+0

你好,原因是,我有一个工具,我需要更新。该工具分析oNodeList_A中的数据(该列表的输入是一个XML文件)。更新我想要做的,以从xm文件中添加此列表中的不同数据。所以除了getElementByTagName(“A”),还有(“B”)。这就是为什么我想填充两个不同的节点列表,然后将它们合并为一个。也许你有想法做到这一点?或不同的解决方案 – Menno

+0

@TimWilliams请参阅上面的注释 – Menno

回答

0

这个工作对我来说:

Sub Tester() 
    Dim xmlDoc As New MSXML2.DOMDocument30 
    Dim objNodes As IXMLDOMNodeList, o As IXMLDOMElement 

    xmlDoc.async = False 

    'xmlDoc.Load "D:\Analysis\config.xml" 
    xmlDoc.LoadXML Range("A1").Value 

    xmlDoc.setProperty "SelectionLanguage", "XPath" '<< required! 

    If xmlDoc.parseError.errorCode <> 0 Then 

    MsgBox "Error!" & vbCrLf & _ 
    " Line: " & xmlDoc.parseError.Line & vbCrLf & _ 
    " Text:" & xmlDoc.parseError.srcText & vbCrLf & _ 
    " Reason: " & xmlDoc.parseError.reason 

    Else 

    Set objNodes = xmlDoc.SelectNodes("root/A|root/B") 
    If objNodes.Length = 0 Then 
     Debug.Print "not found" 
    Else 
     For Each o In objNodes 
     Debug.Print o.tagName, o.nodeTypedValue 
     Next o 
    End If 

    End If 

End Sub 

测试XML:

<?xml version="1.0"?> 
<root> 
    <A>ValA1</A> 
    <A>ValA2</A> 
    <B>ValB1</B> 
    <B>ValB2</B> 
</root>