Urgent - need help identifying XML nodes and Elements using ColdFusion 4.5

Urgent:  I am using ColdFusion 4.5 and javascript to identify the nodes and elements in XML files since they are all different, and I need to process them and put the data into an Access database.  When I loop thru and traverse the file, all I get is 2 nodes and the Elements are all running together even though they have their own tags.  

Can anyone show me how to get all the Elements?  Each file is one record.  Here is my code and file:

Code to see what I have:

<script type="text/vbscript">

set xmlDoc=CreateObject("Microsoft.XMLDOM")
xmlDoc.async="false"
xmlDoc.load("ATT169185.xml")

set elem=xmlDoc.getElementsByTagName("Remarks")
for i = 1 to elem.length
document.write("Remarks Elements are: " & elem.item(i-1).text & "<br>" & "<br>" )
next

for each x in xmlDoc.documentElement.attributes
  document.write("Attribute is: " & x.name )
  //for each y in xmlDoc.documentElement.attributes
  document.write(", which contains: " & x.value & "<br>" & "<br>")
//next
next
document.write("Traversing the node tree now:" & "<br>" & "<br>")
for each y in xmlDoc.documentElement.childNodes
  document.write("<b>" & y.nodename & "</b>")
  document.write(": ")
  document.write(y.text)
  document.write("<br>")
next
</script>


***********
My XML File:
***********

<?xml version="1.0" encoding="UTF-8" ?>
- <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <soapenv:Header>
  <ns1:timeStamp soapenv:mustUnderstand="0" xsi:type="xsd:dateTime" xmlns:ns1="http://www.ngc.com/DTS/GEXTransaction">2004-09-02T17:14:28.320</ns1:timeStamp>
  </soapenv:Header>
- <soapenv:Body>
- <DebxAckTransaction xmlns="http://www.ngc.com/DTS/DEBXTransaction">
- <HeaderInfo>
  <DocumentName>DEBX Ack Transaction</DocumentName>
  <DocumentType>VCH</DocumentType>
  <TransactionType>824V</TransactionType>
  <TANUM>0NTHZK</TANUM>
  <TransactionID>0NTHZK002</TransactionID>
  <TravelerSSN />
  <InvoiceNumber>0NTHZK002</InvoiceNumber>
  <DOVNumber />
  <ResponseStatus>REJECT</ResponseStatus>
  <ResponseStatusDate>2004-09-01</ResponseStatusDate>
  <AdminEmailAddress>DCD003801</AdminEmailAddress>
  <TransactionDate>2004-09-02</TransactionDate>
  <TransactionTime>17:14:28</TransactionTime>
  </HeaderInfo>
- <Remarks>
  <DadsTransactionID>0NTHZK002</DadsTransactionID>
  <ReferenceNumber>0424600101</ReferenceNumber>
  <CodeErrorTitle>Disbursing (DCD-GAFS) Error Code</CodeErrorTitle>
  <CodeErrorDetails>102</CodeErrorDetails>
  <ErrorDescription>Duplicate Record</ErrorDescription>
  <LineIDError>00</LineIDError>
  <TRNError>0NTHZK</TRNError>
  <FillerErrorTitle />
  <FillerErrorDetails />
  </Remarks>
  </DebxAckTransaction>
  </soapenv:Body>
  </soapenv:Envelope>


Thanks for any help!

ptslv
ptslvAsked:
Who is Participating?
 
david_barkerCommented:
>>Why are all the elements being seen now when they weren't before?
Because you were parsing the first level nodes, and not the children of each node.
To do so, I used recursion, that is I call the processnode() function again from each node which has children (and so on for each level).

For the new questions, I don't know anything about ColdFusion.

Hope you will still consider my answer as valid for the initial question !

David

0
 
david_barkerCommented:
How about adding a bit of recursion into your code with the function processnode() ?

<script type="text/vbscript">

'ADDED THIS HERE :
sub processnode(nodes)
  for each y in nodes
    document.write("<b>" & y.nodename & "</b>")
    document.write(": ")
    document.write(y.text)
    document.write("<br>")
    if y.ChildNodes.length>0 then processnode y.ChildNodes
  next
end sub
'TO HERE !


set xmlDoc=CreateObject("Microsoft.XMLDOM")
xmlDoc.async="false"
xmlDoc.load("c:\temp\xml.xml")

set elem=xmlDoc.getElementsByTagName("Remarks")
for i = 1 to elem.length
document.write("Remarks Elements are: " & elem.item(i-1).text & "<br>" & "<br>" )
next

for each x in xmlDoc.documentElement.attributes
  document.write("Attribute is: " & x.name )
  //for each y in xmlDoc.documentElement.attributes
  document.write(", which contains: " & x.value & "<br>" & "<br>")
//next
next

document.write("Traversing the node tree now:" & "<br>" & "<br>")

'ADDED THIS LINE HERE :
processnode xmlDoc.documentElement.ChildNodes

' REMOVED THESE LINES HERE
'for each y in xmlDoc.documentElement.childNodes
'  document.write("<b>" & y.nodename & "</b>")
'  document.write(": ")
'  document.write(y.text)
'  document.write("<br>")
'next

</script>

Hope it makes it !

David
0
 
ptslvAuthor Commented:
David -

That is what I've been trying to do all morning!  Why are all the elements being seen now when they weren't before?
Can you show me how to :

1.  Check to see if an element exixts
2.  If the element exists, place into a field

Such as:
         <cfif xmlDoc.documentElement.childNodes(0).nodeName eq "TransactionType">
      TransactionType.innerText=xmlDoc.getElementsByTagName("TransactionType").item(0).text;
         </cfif>

#2 gives me a error:

Just in time compilation error
Invalid parser construct found on line 18 at position 43. ColdFusion was looking at the following text:
.
Invalid expression format. The usual cause is an error in the expression structure.
The last successfully parsed CFML construct was a CFIF tag occupying document position (18:1) to (18:5).

ptslv
0
Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

 
ptslvAuthor Commented:
Thanks for the help, David.  

As for the levels of childNodes,  how can you tell, just by looking at the xml, how many node levels you have?  I am just learning XML on the fly for this project I have.  I need and appreciate all the help I can get!  Thanks again!

ptslv
0
 
david_barkerCommented:
Open your XML in Internet Explorer, and you will see the indentation of the levels :

Level1 : soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

Level 2 : <soapenv:Header>

Other Level 2 : <soapenv:Body>

Level 3 : <DebxAckTransaction xmlns="http://www.ngc.com/DTS/DEBXTransaction">

Level 4 : <HeaderInfo>

Other Level 4 : <Remarks>

If you include the last level items like <DocumentName>DEBX Ack Transaction</DocumentName> ), that gives us 5 levels of nesting.


0
 
ptslvAuthor Commented:
OK.  Thanks, David.  Appreciate the help!

ptslv
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.