Solved

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

Posted on 2004-09-30
6
557 Views
Last Modified: 2013-12-16
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
0
Comment
Question by:ptslv
  • 3
  • 3
6 Comments
 
LVL 6

Expert Comment

by:david_barker
Comment Utility
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
 

Author Comment

by:ptslv
Comment Utility
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
 
LVL 6

Accepted Solution

by:
david_barker earned 300 total points
Comment Utility
>>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
Better Security Awareness With Threat Intelligence

See how one of the leading financial services organizations uses Recorded Future as part of a holistic threat intelligence program to promote security awareness and proactively and efficiently identify threats.

 

Author Comment

by:ptslv
Comment Utility
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
 
LVL 6

Expert Comment

by:david_barker
Comment Utility
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
 

Author Comment

by:ptslv
Comment Utility
OK.  Thanks, David.  Appreciate the help!

ptslv
0

Featured Post

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

Join & Write a Comment

Suggested Solutions

Since upgrading to Office 2013 or higher installing the Smart Indenter addin will fail. This article will explain how to install it so it will work regardless of the Office version installed.
This is about my first experience with programming Arduino.
The purpose of this video is to demonstrate how to set up an RSS Feed on a WordPress Website. This will be demonstrated using a Windows 8 PC. Feedburner will be used for this demonstration. Go to your WordPress login page. This will look like the…
The purpose of this video is to demonstrate how to set up basic WordPress SEO. This will be demonstrated using a Windows 8 PC. The plugin used will be WordPress SEO by Yoast. Go to your WordPress login page. This will look like the following: myw…

771 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

11 Experts available now in Live!

Get 1:1 Help Now