Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsWhite Papers
Discussion GroupsFirst AidDatabasesJavaBeansGUIJava 3DVirtual MachineCORBASecurityToolsGeneral
Java DirectoryOpen Source ProjectsSample Book ChaptersUser GroupsWeb Resources
Related Topics
Databases.NETMore Topics ...

Java Forum / General / November 2007

Tip: Looking for answers? Try searching our database.

How to compare numeric values between two xml files?

Thread view: 
www - 07 Nov 2007 20:03 GMT
Hi,

I have a xml file, something like:

<?xml version="1.0" encoding="UTF-8"?>
<Series>
<header>
<type>accumulative</type>
<creationDate>2007-11-07</creationDate>
<creationTime>14:28:46</creationTime>
</header>
<event date="1985-09-01" flag="1" time="06:00:00" value="1.400"/>
<event date="1985-09-01" flag="1" time="12:00:00" value="2.500"/>
<event date="1985-09-01" flag="1" time="18:00:00" value="5.900"/>
<event date="1985-09-02" flag="1" time="00:00:00" value="3.000"/>
<Series>

Another xml file:

<?xml version="1.0" encoding="UTF-8"?>
<Series>
<header>
<type>accumulative</type>
<creationDate>2007-11-07</creationDate>
<creationTime>14:28:46</creationTime>
</header>
<event date="1985-09-01" flag="1" time="06:00:00" value="1.500"/>
<event date="1985-09-01" flag="1" time="12:00:00" value="2.600"/>
<event date="1985-09-01" flag="1" time="18:00:00" value="5.950"/>
<event date="1985-09-02" flag="1" time="00:00:00" value="3.100"/>
<Series>

I hope to compare, between the two files, date, time and value(in JUnit
test). Hopefully, when comparing the values, I can set some error
tolerance. Is there a way to do it? I don't want to extract substring
from each line, because the exact locations(the index) can be different
in next run.

Thank you very much.
Roedy Green - 07 Nov 2007 20:09 GMT
>I hope to compare, between the two files, date, time and value(in JUnit
>test). Hopefully, when comparing the values, I can set some error
>tolerance. Is there a way to do it? I don't want to extract substring
>from each line, because the exact locations(the index) can be different
>in next run.

read the two trees using any one of a number of XML parsing
techniques.
You can then match dates by sort/compare or by putting the values into
a HashMap and looking for a duplicate from the other tree.

see http://mindprod.com/jgloss/xml.html
Signature

Roedy Green Canadian Mind Products
The Java Glossary
http://mindprod.com

Arne Vajhøj - 12 Nov 2007 03:09 GMT
> I have a xml file, something like:
>
[quoted text clipped - 31 lines]
> from each line, because the exact locations(the index) can be different
> in next run.

I hope this will get you started.

Arne
Arne Vajhøj - 12 Nov 2007 03:09 GMT
>> I have a xml file, something like:
>>
[quoted text clipped - 33 lines]
>
> I hope this will get you started.

I forgot the code.

:-)

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.apache.xpath.XPathAPI;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

public class XmlDiff {
    public static void main(String[] args) throws Exception {
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();
        Document doc1 = db.parse("C:\\ser1.xml");
        Document doc2 = db.parse("C:\\ser2.xml");
        NodeList events1 = doc1.getElementsByTagName("event");
        for(int i = 0; i < events1.getLength(); i++) {
            Element event1 = (Element) events1.item(i);
            String d1 = event1.getAttribute("date");
            String t1 = event1.getAttribute("time");
            String v1 = event1.getAttribute("value");
            Element event2 =
(Element)XPathAPI.selectSingleNode(doc2.getDocumentElement(),
"//Series/event[@date='" + d1 + "' and @time='" + t1 + "']");
            if(event2 != null) {
                String v2 = event2.getAttribute("value");
                if(!v1.equals(v2)) {
                    System.out.println(d1 + " " + t1 + " changed from "
+ v1 + " to " + v2);
                } else {
                    System.out.println(d1 + " " + t1 + " identical");
                }
            } else {
                System.out.println(d1 + " " + t1 + " missing");
            }
        }
    }
}

Arne


Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2009 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.