First of all "Thanks" for you time in looking into this.
I would be really thankful if someone could give me a sample code / snippet for solving the issue. I am facing difficulty reading ChildNode of ChildNode of ChildNode ... in XML through VBA. My current code can only read
<view>
<id>55494</id>
<viewName>New View</viewName>
<viewDescription>Asset Management</viewDescription>
However i want to read <columnName>Cost Center</columnName> along with viewName in a tabular form in sheet.
SAMPLE XML
<?xml version="1.0" encoding="UTF-8"?>
<info>
<exportdate>2014-08-19 14:43 IST (+0530)</exportdate>
</info>
<source>
<id>55307</id>
</source>
<source>
<id>55222</id>
</source>
<source>
<id>55000</id>
</source>
<view>
<id>55494</id>
<viewName>New View</viewName>
<viewDescription>Asset Management</viewDescription>
<subViewList>
<subView>
<id>82325</id>
<viewName>`System Schema`.`AST:PurchaseLineItem`</viewName>
<viewDescription>AST:PurchaseLineItem</viewDescription>
<fieldList>
<viewField>
<id>82378</id>
<columnName>Actual Price.Value</columnName>
<shortDescription>Actual Price.Value</shortDescription>
</viewField>
<viewField>
<id>82379</id>
<columnName>Cost Center</columnName>
<shortDescription>Cost Center</shortDescription>
</viewField>
<viewField>
<id>82376</id>
<columnName>Shipping & Handling.Type</columnName>
<shortDescription>Shipping & Handling.Type</shortDescription>
</viewField>
</fieldList>
</subView>
<subView>
<id>12345</id>
<viewName>`System Schema`.`AST:PurchaseLineItem`</viewName>
<viewDescription>AST:PurchaseLineItem</viewDescription>
<fieldList>
<viewField>
<id>2345</id>
<columnName>Actual Price.Value</columnName>
<shortDescription>Actual Price.Value</shortDescription>
</viewField>
<viewField>
<id>8000</id>
<columnName>Cost Center</columnName>
<shortDescription>Cost Center</shortDescription>
</viewField>
<viewField>
<id>9999</id>
<columnName>Shipping & Handling.Type</columnName>
<shortDescription>Shipping & Handling.Type</shortDescription>
</viewField>
</fieldList>
</subView>
</subViewList>
</view>
<view>
<id>55494</id>
<viewName>test View</viewName>
<viewDescription>test Management</viewDescription>
<subViewList>
<subView>
<id>82325</id>
<viewName>`System Schema`.`AST:PurchaseLineItem`</viewName>
<viewDescription>AST:PurchaseLineItem</viewDescription>
<fieldList>
<viewField>
<id>82378</id>
<columnName>test1</columnName>
<shortDescription>Actual Price.Value</shortDescription>
</viewField>
<viewField>
<id>82379</id>
<columnName>test Center</columnName>
<shortDescription>Cost Center</shortDescription>
</viewField>
<viewField>
<id>82376</id>
<columnName>test & Handling.Type</columnName>
<shortDescription>Shipping & Handling.Type</shortDescription>
</viewField>
</fieldList>
</subView>
<subView>
<id>12345</id>
<viewName>`System Schema`.`AST:PurchaseLineItem`</viewName>
<viewDescription>APMItem</viewDescription>
<fieldList>
<viewField>
<id>2345</id>
<columnName>test Price.Value</columnName>
<shortDescription>Actual Price.Value</shortDescription>
</viewField>
<viewField>
<id>8000</id>
<columnName>Cost Center</columnName>
<shortDescription>Cost Center</shortDescription>
</viewField>
<viewField>
<id>9999</id>
<columnName>Shipping & Handling.Type</columnName>
<shortDescription>Shipping & Handling.Type</shortDescription>
</viewField>
</fieldList>
</subView>
</subViewList>
</view>
My current code is giving ERROR:- "Runtime :6" "Overflow" when i include "columnName" and second "viewDescription"
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\vw_pun_atm_dv04.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
No comments:
Post a Comment