2014-08-28 87 views
0

首先“感谢”你的时间来研究这一点。VBA以XML格式读取ChildNode的ChildNode的ChildNode

如果有人能给我一个解决问题的示例代码/代码段,我会非常感激。 我正在通过VBA读取ChildNode的ChildNode的ChildNode ...在XML中遇到困难。

示例XML:sample XML file

我当前的代码提供了错误:运行时错误6溢出。

我想要的输出是这样

ID  VIEW DESCRIPTION COLUMNNAME 
55494 Asset Management  Actual Price.Value 
55464 Change Management  CAB Manager (Change Co-ord) 
55464 Change Management  Manufacturer (2) 
55464 Change Management  Change Timing 
55308 Incident Management  Submitter 
55308 Incident Management  Submit Date 
55308 Incident Management  Secure Work Log 
55308 Incident Management  Number of Attachments 
73189 Knowledge Management  
73189 Knowledge Management ArticleCompany 
73189 Knowledge Management ArticleDocID 

当前代码

Sub test() 
Dim Init As Integer 
Dim xmlDoc As New DOMDocument 
Dim DomNode1 As IXMLDOMElement 
Dim DomNode2 As IXMLDOMElement 
Dim node As IXMLDOMNode 
Dim childNode1 As IXMLDOMNode 
Dim childNode2 As IXMLDOMNode 
Dim childNode6 As IXMLDOMNode 
Dim elements As Object 
Dim el As Variant 

Init = 7 

'Worksheets("Report_Details").Select 
xmlDoc.Load ("C:\DRIVE\BMC\DSS\01_DSS_NExT\SP_1\IN APP\Automation_YF\Tools\TEST_xml.xml") 
child_count = 0 
For Each DomNode1 In xmlDoc.getElementsByTagName("view") 
For Each childNode1 In DomNode1.getElementsByTagName("id") 
For Each childNode2 In DomNode1.getElementsByTagName("viewDescription") 
For Each childNode6 In DomNode1.getElementsByTagName("columnName") 

        ActiveSheet.Cells(Init, 6).Value2 = childNode6.Text 
    ActiveSheet.Cells(Init, 2).Value2 = childNode2.Text 
ActiveSheet.Cells(Init, 1).Value2 = childNode1.Text 

child_count = child_count + 1 
Init = Init + 1 
        Next childNode6 
       Next childNode2 
Next childNode1 
Next DomNode1 
End Sub 
+0

请编辑你的q向您展示您给出的示例XML所需的输出。顺便说一下,XML的格式不正确;第一行下面的所有内容都应包含在' ...'中。 – 2014-08-28 09:07:42

+0

XML很大,消息对行数有限制。我正在努力弄清楚。 – WolfSkin 2014-08-28 11:42:22

+0

当然,但是对于你在问题中写的那几行XML,输出是什么? – 2014-08-28 11:54:41

回答

1

尝试使用SelectNodes()SelectSingleNode()通过合适的XPath表达式作为参数,例如:

Init = 7 
xmlDoc.Load ("C:\DRIVE\BMC\DSS\01_DSS_NExT\SP_1\IN APP\Automation_YF\Tools\vw_pun_atm_dv04.xml") 
For Each DomNode1 In xmlDoc.SelectNodes("//view[id and viewDescription and columnName]") 
    ActiveSheet.Cells(Init, 6).Value2 = DomNode1.SelectSingleNode("./id").Text 
    ActiveSheet.Cells(Init, 2).Value2 = DomNode1.SelectSingleNode("./viewDescription").Text 
    ActiveSheet.Cells(Init, 1).Value2 = DomNode1.SelectSingleNode("./columnName").Text 
    Init = Init + 1 
Next DomNode1 
+0

一些帮助,在你的代码略有变化 初始化= 7 xmlDoc.Load(“C:\驱动器\ BMC \ DSS \ 01_DSS_NExT \ SP_1 \ IN APP \ Automation_YF \工具\ vw_pun_atm_dv04.xml “) For Each DomNode1 In xmlDoc.SelectNodes(”// view [id and viewDescription]“) ActiveSheet.Cells(Init,1).Value2 = DomNode1.SelectSingleNode(”./id“)。Text ActiveSheet.Cells (Init,2).Value2 = DomNode1.SelectSingleNode(“./ viewDescription”)。Text ActiveSheet.Cells(Init,3).Value2 = DomNode1.SelectSingleNode(“./fieldList/viewField/columnName”)。Text Init = Init + 1 Next DomNode1 它不循环,每个id只给出一行 – WolfSkin 2014-09-01 11:00:09