| |
Imaginativeone
Posts: 7
Score: 0
Joined: 9/22/2008
Status: offline
|
I have XML that looks like this: <BANKRECORD> <tyHeader>+++BIC-A TY-05+++</tyHeader> <EVNT-014>EVNT-014 RECUR PMT AMT-dollarSign 687.00 ETD-05/04 THRU 12/04 (08)</EVNT-014> </BANKRECORD> That I would like to transform into this: <BANKRECORD> <tyHeader="+++BIC-A TY-05+++"> <TRANS>TRANS RPD-01/26/05 COM-02/05 SSC-B MADCAP</TRANS> <EVNT-014>EVNT-014 RECUR PMT AMT-dollarSign 687.00 ETD-05/04 THRU 12/04 (08)</EVNT-014> </tyHeader> </BANKRECORD> In short, is there a way that I can take an element and "demote" it within an already existing XML tree? Converting the text to an attribute is a piece of cake, but I'm having a difficult time figuring out the demotions. So far, I've conceived this: Function updateXML(updatedXMLArray) Dim joinedArray joinedArray = Join(updatedXMLArray) Dim xmlDocument Set xmlDocument = CreateObject("Microsoft.XMLDOM") xmlDocument.loadXML("<BANKRECORD>" & joinedArray &"</BANKRECORD>") Dim rootDocument Set rootDocument = xmlDocument.documentElement Dim docChild For Each docChild in rootDocument.childNodes if docChild.nodeName = tyHeader then if(InStr(docChild.nodeName, "EVNT") <> 0 then DemoteElement(docChild.parentNode.nodeName, docChild.nodeName, docChild.text) end if end if Next Function DemoteElement(parent, node, text) ??? End Function Function PromoteElement(tempRoot, xml) Dim elementArray Set elementArray = New DynamicArray Dim xmlDocument Set xmlDocument = CreateObject("Microsoft.XMLDOM") xmlDocument.loadXML("<tempRoot>" & xml & "</tempRoot>") Dim nodeNameDocument Set nodeNameDocument = xmlDocument.documentElement Dim item item = 0 elementArray.Data(item) = "<" & tempRoot & ">" item = item + 1 Dim nodeNameChild For Each nodeNameChild In nodeNameDocument.childNodes MsgBox(nodeNameChild.nodeName & "-" & nodeNameChild.text) elementArray.Data(item) = nodeNameChild.text item = item + 1 Next elementArray.Data(item) = "</" & tempRoot & ">" PromoteElement = elementArray.DataArray End Function Function RemoveElement(nodeName, element) Dim elementArray Set elementArray = New DynamicArray Dim xmlDocument Set xmlDocument = CreateObject("Microsoft.XMLDOM") xmlDocument.loadXML("<nodeName>" & element & "</nodeName>") Dim nodeNameDocument Set nodeNameDocument = xmlDocument.documentElement Dim item item = 0 elementArray.Data(item) = "<" & nodeName & ">" item = item + 1 Dim nodeNameChild For Each nodeNameChild In nodeNameDocument.childNodes elementArray.Data(item) = nodeNameChild.text item = item + 1 Next elementArray.Data(item) = "</" & nodeName & ">" RemoveElement = elementArray.DataArray End Function Function CreateNewElement(nodeName, element) Dim elementArray Set elementArray = New DynamicArray Dim xmlDocument Set xmlDocument = CreateObject("Microsoft.XMLDOM") xmlDocument.loadXML("<nodeName>" & element & "</nodeName>") Dim nodeNameDocument Set nodeNameDocument = xmlDocument.documentElement Dim item item = 0 elementArray.Data(item) = "<" & nodeName & ">" item = item + 1 Dim nodeNameChild For Each nodeNameChild In nodeNameDocument.childNodes elementArray.Data(item) = nodeNameChild.text item = item + 1 Next elementArray.Data(item) = "</" & nodeName & ">" CreateNewElement = elementArray.DataArray End Function Function createElementVB(strElementName, strElementContents, strElementParent) Dim beginTag, endngTag beginTag = "<" & strElementName & ">" endngTag = "</" & strElementName & ">" createElementVB = beginTag & strElementContents & strElementParent & endngTag End Function Class DynamicArray '************** Properties ************** Private aData '**************************************** '*********** Event Handlers ************* Private Sub Class_Initialize() Redim aData(0) End Sub '**************************************** '************ Property Get ************** Public Property Get Data(iPos) 'Make sure the end developer is not requesting an '"out of bounds" array element If iPos < LBound(aData) or iPos > UBound(aData) then Exit Property 'Invalid range End If Data = aData(iPos) End Property Public Property Get DataArray() DataArray = aData End Property '**************************************** '************ Property Let ************** Public Property Let Data(iPos, varValue) 'Make sure iPos >= LBound(aData) If iPos < LBound(aData) Then Exit Property If iPos > UBound(aData) then 'We need to resize the array Redim Preserve aData(iPos) aData(iPos) = varValue Else 'We don't need to resize the array aData(iPos) = varValue End If End Property '**************************************** '************** Methods ***************** Public Function StartIndex() StartIndex = LBound(aData) End Function Public Function StopIndex() StopIndex = UBound(aData) End Function Public Sub Delete(iPos) 'Make sure iPos is within acceptable ranges If iPos < LBound(aData) or iPos > UBound(aData) then Exit Sub 'Invalid range End If Dim iLoop For iLoop = iPos to UBound(aData) - 1 aData(iLoop) = aData(iLoop + 1) Next Redim Preserve aData(UBound(aData) - 1) End Sub '**************************************** End Class
< Message edited by Imaginativeone -- 9/22/2008 11:02:36 PM >
_____________________________
I was walking in a forest, and tree fell right in front of me! (And I didn't hear it.)
|
|