Micro Focus QTP (UFT) Forums
QTP file compare - ignoring file structure - Printable Version

+- Micro Focus QTP (UFT) Forums (https://www.learnqtp.com/forums)
+-- Forum: Micro Focus UFT (earlier known as QTP) (https://www.learnqtp.com/forums/Forum-Micro-Focus-UFT-earlier-known-as-QTP)
+--- Forum: VB Scripting/Descriptive Programming (https://www.learnqtp.com/forums/Forum-VB-Scripting-Descriptive-Programming)
+--- Thread: QTP file compare - ignoring file structure (/Thread-QTP-file-compare-ignoring-file-structure)



QTP file compare - ignoring file structure - Fede - 01-27-2012

Hi all,

I am looking for a generic way to compare the information in 2 separate (xml) files regardless of the structure of the files.

Example and script below. Although the information in the files are equal the test results in a failure.

================
EXAMPLE:

****** Test_1.xml ******

Code:
<note>
  <to>John</to>
  <from>Sue</from>
  <heading>Reminder</heading>
  <body>Don't forget the meeting!</body>
  </note>

****** Test_2.xml ******

Code:
<note>
  <to>John</to>
  <from>Sue</from>
  <body>Don't forget the meeting!</body>
  <heading>Reminder</heading>
  </note>

================

Script I am using only does a 1-2-1 compare.
Any help is appreciated.



================
SCRIPT:

Code:
Set xml_Doc1 = CreateObject("Msxml2.DOMDocument")
xml_Doc1.load("C:\Test\QTP\Test_1.xml")

Set xml_Doc2 = CreateObject("Msxml2.DOMDocument")
xml_Doc2.load("C:\Test\QTP\Test_2.xml")

Set Elem_File_1= xml_Doc1.DocumentElement.ChildNodes
Set Elem_File_2= xml_Doc2.DocumentElement.ChildNodes


If Elem_File_1.length = Elem_File_2.length Then
Reporter.ReportEvent Pass,"same number of Child nodes?", "File 1 & File 2 have same number of Child nodes"
Else
Reporter.ReportEvent Fail,"same number of Child nodes?",  "File 1 & File 2 have different Child nodes"
WScript.Quit
end if

For i = 0 to Elem_File_1.length-1

If Elem_File_1.item(i).Text = Elem_File_2.item(i).Text Then
Elem_File_1.item(i).Text & vbnewline &  "In File-2, The value is: "&Elem_File_2.item(i).Text
Reporter.ReportEvent Pass,"same nodes?", "File 1 & File 2 have same number of Child nodes"
Else
Reporter.ReportEvent Fail,"same nodes?", "Child Element: "& i &" is NOT SAME in File-1 & File-2" & vbnewline & "In File-1, The value is: " & Elem_File_1.item(i).Text & vbnewline & "In File-2, The value is: "&Elem_File_2.item(i).Text
End If

Next

================


RE: QTP file compare - ignoring file structure - basanth27 - 01-29-2012

Probably the space. Use the trim to see if it helps.


RE: QTP file compare - ignoring file structure - Fede - 01-30-2012

Hello Basanth,

Thanks for your reply.

While Trim would help remove the whitespaces from the file, it does not suit my purpose. I have tags <body> and <heading> in different places, that is what is causing the failure.

Fede


RE: QTP file compare - ignoring file structure - Parke - 02-17-2012

I have coded in vbscript but the msgbox can be changed to Reporter.ReportEvent without problems.

The following code is being added to your code above:
Code:
set odic1 = CreateObject("Scripting.Dictionary")
set odic2 = CreateObject("Scripting.Dictionary")

''// the key will contain the nodename and the value
''// this way we catch a "to Sue" as different from a "to John"
''// if there are still duplicates, might want to make use of the improved dictionary
' http://www.advancedqtp.com/wp-content/uploads/WLW/Animproveddictionaryobject_10D37/Dictionary.VBS
' http://www.advancedqtp.com/2008/06/an-improved-dictionary-object/

''// I have not thought about a book catalog and how to handle where the same author will occur more than once.  Increase the key to include the year? Do not know.

For i = 0 to Elem_File_1.length-1
    odic1.Add Elem_File_1.item(i).nodeName & ":" & Elem_File_1.item(i).text, 1
    odic2.add Elem_File_2.item(i).nodeName&":"&Elem_File_2.item(i).text, 1    
next

key1arr = odic1.keys
for j = 0 to uBound(key1Arr)
    if NOT(odic2.exists(key1Arr(j))) then
        msgbox "This does not exist in Test_2.xml : " & key1arr(j)
    Else
        odic2(key1arr(j)) = odic2(key1arr(j)) + 1 ' value does exist in Test_2.xml
    end if
next

s = ""
key2arr = odic2.keys
for k = 0 to uBound(key2arr)
    if odic2(key2arr(k)) = 1 Then
        s = s & vbcrlf & key2arr(k)  ' this value did not exist in Test_1.xml
    End If
next

if s <> "" Then
    s = "the following does not exist in Test_1.xml file " & vbcrlf & s
    msgbox s
else
    msgbox "The two files have the same elements."
End If

HTH,