Solved

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

Posted on 2004-09-30
6
560 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
ID: 12191354
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
ID: 12191648
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
ID: 12191760
>>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
VMware Disaster Recovery and Data Protection

In this expert guide, you’ll learn about the components of a Modern Data Center. You will use cases for the value-added capabilities of Veeam®, including combining backup and replication for VMware disaster recovery and using replication for data center migration.

 

Author Comment

by:ptslv
ID: 12192035
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
ID: 12192112
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
ID: 12192307
OK.  Thanks, David.  Appreciate the help!

ptslv
0

Featured Post

Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

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 article will inform Clients about common and important expectations from the freelancers (Experts) who are looking at your Gig.
The viewer will learn the basics of jQuery, including how to invoke it on a web page. Reference your jQuery libraries: (CODE) Include your new external js/jQuery file: (CODE) Write your first lines of code to setup your site for jQuery.: (CODE)
The viewer will learn how to create a basic form using some HTML5 and PHP for later processing. Set up your basic HTML file. Open your form tag and set the method and action attributes.: (CODE) Set up your first few inputs one for the name and …

821 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