Solved

Urgent! Java XML parser...

Posted on 2000-05-08
18
378 Views
Last Modified: 2013-11-23
I NEED big time help on this. I need the source code for a jav program that converts an XML file into objects. We are currently using sun JAVA XML parser API which has DOM/SAX implementation. Preferably I need source code which which does the above and then a another program can read the objects and print them.

example:-
XML--> java parser --> objects containing the XML data --> print on screen.

It should print it such that it shows the variable and then its value. Anyone who has inclination to do this can email me at chaoswarlord50@yahoo.com

urgent!!
0
Comment
Question by:chaos50
  • 8
  • 3
  • 2
  • +5
18 Comments
 
LVL 3

Expert Comment

by:ovidiucraciun
ID: 2788900
well ... ;)
0
 
LVL 1

Expert Comment

by:techtime
ID: 2788944
I am not sure if it will help you, but here is a link to a very small XML parser that I guess suits you needs just fine.
http://nanoxml.sourceforge.net/nanoxml.zip
I don't understand exactly what you mean by "shows variable and then its value" but what their example application does is very simular.
If you need any customization you can contact me at techtime@rostkl.rnd.su
0
 

Author Comment

by:chaos50
ID: 2790713
What I mean is...
when the parser finishes its process...
it then creates classes which hold the xml data right...
This class file is then passed to another java program through invocation which then usses the created classes.
In exact flow:-
a simple display program will invoke the Java parser with an XML as an argument, which then returns the class file to the display program. This program then simply displays the contents of the class file by showing
the a variable in the class and the data which it holds. As an example, lets say the XML has this statement:

<Name>Myname</Name>

The parser would create a class holding variables, one of which is Name and has the value Myname.

Thanks for the 'smile' ovidiucraciun, but I'm wonderring what is so... 'well'.

0
 
LVL 1

Expert Comment

by:yanchou
ID: 2794813
Do you want your work done by someone here or you want a advice? There might be different solutation depends on the XML structure...
0
 

Author Comment

by:chaos50
ID: 2802866
HOLD on a sec, anyone.... My PC got pooch screwed by some punk's virus. I'm gonna ...

Hopefully I'll be able to put up something this monday. I have a sample code to show what I have vs want I wanted to do...
0
 

Author Comment

by:chaos50
ID: 2802895
Sorry for that last one, I don't know java too well and have to complete this by end of next week. There still a lot to do and learn so If possible any sample code would really be appreciated. I you really need to know, I have basic C knowledge but that about it. I'm just a graphic designer/animator!!! How I landed in this job was practically a nightmare.
They said all that was needed was a *litle* programming knowledge....
Sure, right........
0
 
LVL 1

Expert Comment

by:yanchou
ID: 2803265
Ummmmm..., Let me show you an example I did before, I hope that will help you out.

Note*: I deleted some information which might be confidential, but I am sure it should be no problem for you to run it.

-------------------------------
1. XML file to be parsed:

<?xml version="1.0" standalone="no"?>
<request id="32880" type="Trouble Ticket Entry Request">
        <header>
                <sender>
                        <key>
                                <login/>
                                <password/>
                                <businessid/>
                        </key>
        </header>
        <body>
                <subrequest id="3456" type="Trouble Ticket Entry">
                </subrequest>
        </body>
</request>

---------------------------------
2. The Java class for this XML:


public class UniqueID{
 public     String ID="";
 public     String ispID="";
 public     String type="";

     public  UniqueID(){}

     public  UniqueID( String ispID,String ID,String type){
        this.ID = ID;
        this.ispID = ispID;
        this.type = type;
     }

     public String toString(){
        return ispID + "_" + ID;
     }
}


------------------------------
Code to parse the xml and extract the information for UniqueID


import java.util.Properties;
import java.io.*;
import org.xml.sax.HandlerBase;
import org.xml.sax.AttributeList;
import org.xml.sax.helpers.ParserFactory;
import org.xml.sax.*;
import com.sun.xml.parser.*;


public class XMLInfo{

    private org.xml.sax.Parser parser = null;

    private static String responseId;

public static Object parse(String XMLContent) {

         UniqueID key = new UniqueID();

         try{
             parser = ParserFactory.makeParser("com.sun.xml.parser.Parser");
             parser.setDocumentHandler(new KeyParser(key));
             StringReader sReader = new StringReader(XMLContent);
             InputSource input = new InputSource(sReader);
             parser.parse(input);
         } catch (SAXParseException e){

             System.out.println ("** Parsing error" + ", line " + e.getLineNumber ()
                                + ", uri " + e.getSystemId ());
             System.out.println("\n" + e.getMessage ());
             

          }
          return key;
     }
}

class KeyParser extends HandlerBase implements Serializable{

      private UniqueID key;
      private String tag="";

      public KeyParser(UniqueID key){
             this.key = key;
      }


public void startElement(String name, AttributeList attrs) throws SAXException{

    tag = name;
    if(tag.equalsIgnoreCase("request")||tag.equalsIgnoreCase("response")){
         key.ID = attrs.getValue("id");
         if (key.ID == null) key.ID ="";
    }

    if(tag.equalsIgnoreCase("subrequest")||tag.equalsIgnoreCase("subresponse")){
         key.type = attrs.getValue("type");
         if (key.type == null) key.type ="";
    }

}


public void endElement(String name) throws SAXException{
    tag = "";
}


public void characters(char buf[], int offset, int len) throws SAXException{
     if (tag.equalsIgnoreCase("login")){
        String value = new String(buf,offset,len) ;
        if (value!=null) key.ispID = value.trim();

     }

}

}






0
 

Author Comment

by:chaos50
ID: 2803846
One slight problem, I have this problem:-
----------------------------------------
C:\heve>javac -classpath c:\heve UniqueID.java

C:\heve>pause
Press any key to continue . . .

C:\heve>javac -classpath c:\heve;parser.jar XMLInfo.java
XMLInfo.java:23: Can't make a static reference to nonstatic variable parser in c
lass XMLInfo.
             parser = ParserFactory.makeParser("com.sun.xml.parser.Parser");
             ^
1 error
----------------------------------------
I then added to the problem by adding static to the required line and..
C:\heve>javac -classpath c:\heve;parser.jar XMLInfo.java
XMLInfo.java:22: Exception java.lang.InstantiationException must be caught, or i
t must be declared in the throws clause of this method.
             parser = ParserFactory.makeParser("com.sun.xml.parser.Parser");
                                              ^
XMLInfo.java:22: Exception java.lang.ClassNotFoundException must be caught, or i
t must be declared in the throws clause of this method.
             parser = ParserFactory.makeParser("com.sun.xml.parser.Parser");
                                              ^
XMLInfo.java:22: Exception java.lang.IllegalAccessException must be caught, or i
t must be declared in the throws clause of this method.
             parser = ParserFactory.makeParser("com.sun.xml.parser.Parser");
                                              ^
XMLInfo.java:26: Exception java.io.IOException must be caught, or it must be dec
lared in the throws clause of this method.
             parser.parse(input);
                         ^
XMLInfo.java:26: Exception org.xml.sax.SAXException must be caught, or it must b
e declared in the throws clause of this method.
             parser.parse(input);
                         ^
5 errors
----------------------------------------
help me ok, I new java, 1 week learning.
0
 
LVL 1

Expert Comment

by:yanchou
ID: 2805282
in XMLInfo class, please change this line to

1.  
private org.xml.sax.Parser parser = null;

private static org.xml.sax.Parser parser = null;

2. change this line

} catch (SAXParseException e){

as

} catch (Exception e){            

sorry for inconvenient, try this out.

0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 

Author Comment

by:chaos50
ID: 2812875
Here's another set of problem after the changes.

a) It appears that the Exception class does not posses these methods.

C:\heve>javac -classpath c:\heve;parser.jar XMLInfo.java
XMLInfo.java:30: Invalid expression statement.
                                + ", uri " + e.getSystemId ());
                                           ^
XMLInfo.java:30: ';' expected.
                                + ", uri " + e.getSystemId ());
                                                             ^
2 errors

b)Next, I comented out those lines so that the exception is ignored, with proper adjustments. And got this...
OK, it compiles: but theres no main.
How do I put a main in there. How would the main call the parser 'object'. I don't understand that part. I have been reading books, but most of them show the use of main differently and I not quite sure of how to implement that, here.

Anyway, I tried by replacing the 'Object parser' with 'void main' becasue most of te other program does that. Obviously it doesn't work. I was thinking about a program which receives a XML file as an argument, then executes the parsing based on that file.

Hows about your email, that would make it easier for me to send the files which I've altered and let you decide.?
Again my email is chaoswarlord50@yahoo.com .

0
 
LVL 1

Expert Comment

by:karthicraja
ID: 2816596
HOPE THIS HELPS
KARTHIC

EXAMPLE.
 
<?xml version="1.0" encoding="UTF-8"?>
<rulefile>
      <field name="page">
            <start>images/rightarrow.gif</start>
            <end>Show next</end>
      </field>
      <field name="url">
            <start>Position Title:</start>
            <end>&gt;</end>
      </field>
      <field Name="nextpage">
            <start>images/rightarrow.gif</start>
            <end>Show next</end>
      </field>
</rulefile>


// THIS CODE WILL GIVE YOU AN IDEA ABOUT HOW TO PROCEED IN, NOT THE EXACT SOLUTION FOR YOUR QUESTION


public class XMLExtractor
{

    private Hashtable fields = new Hashtable();

    private XMLDocument doc;

    public XMLExtractor()
    {
        fields = new Hashtable();
    }
   
    public void configureSettings(String pstrFileName) throws Exception
    {

        DOMParser parser = new DOMParser();
       
        URL url = URLCreator.getURL(pstrFileName); // given the file name gives you the URL like file:/d:/abc.xml

        parser.setErrorStream(System.err);

        parser.setValidationMode(false);
       
        parser.showWarnings(true);

        parser.parse(url);

        doc = parser.getDocument();
    }

    public void validate(Object obj)
    {
        if(obj == null)
        {
            System.out.println("Initialisation of XML object failure");
           
            System.exit(0);
        }
    }

    // THIS FUNCTION EXTRACTS THE FIELDS IN THE ABOVE XML IT IS "field" TAG


    public void getElements(String tagName)
    {

        NodeList list = doc.getElementsByTagName(tagName);
       
        int len = list.getLength();
       
        for (int i=0; i < len; i++)
        {

            Element e = (Element)list.item(i);

            NamedNodeMap nodeMap = e.getAttributes();

            if (nodeMap != null)
            {

                for (int j=0; j<nodeMap.getLength(); j++)
                {

                    Node n = nodeMap.item(j);

                    String  attName = n.getNodeValue();

                    fields.put(attName,e);

                }
            }
        }
    }

    // THIS FUNCTION EXTRACTS THE ATTRIBUTES. LIKE HERE IN THE XML, IMAGES\RIGHTARROW.GIF

    public SearchTag getValue(String pstrAttribute)
    {

        // THIS IS THE OBJECT WHERE YOU ARE GOING TO STORE YOUR VALUES, IT ALL DEPENDS ON YOU TO FRAME THIS.

        SearchTag stag = new SearchTag();
       
        Element e = (Element) fields.get(pstrAttribute);

        validate(e);

        NodeList list = e.getChildNodes();
       
        if(list != null)
        {
            stag.setLength( list.getLength()-1);

            for(int i=0;i<list.getLength(); i++)
            {
                NodeList n2 = list.item(i).getChildNodes();

                if(n2 != null)
                {
                    if(list.item(i).getNodeName().compareToIgnoreCase("start") == 0)
                    {
                        stag.setStartTag( n2.item(0).getNodeValue() );
                    }
                   
                    else
                       
                        stag.setEndTag( n2.item(0).getNodeValue() );
                }
            }
        }
        return stag;
    }

    static public void main(String[] argv)
    {
        try
        {
            Hashtable fields = new Hashtable();
           
            XMLExtractor a = new XMLExtractor();
           
            a.configureSettings("123.xml");
           
            a.getElements("fields");
           
            a.getValue("page");
           
            a.getValue("url");
           
            a.getValue("nextpage");
           
        }
        catch (Exception e)
        {
           
            System.out.println(e.toString());
           
        }
    }
}



0
 
LVL 1

Accepted Solution

by:
techtime earned 350 total points
ID: 2817859
I've emailed my code to you chaos50.
0
 

Author Comment

by:chaos50
ID: 2893965
Sorry, But techtime has helped me way more. He deserves it.
0
 

Author Comment

by:chaos50
ID: 2893986
Comment accepted as answer
0
 

Author Comment

by:chaos50
ID: 2893987
No comment needed. It's all said and done. Thanks.
0
 

Expert Comment

by:funksoul
ID: 3895353
techtime or chaos50

Can you email the code as well....I have a similar task to be performed.

thanks!

tym1@hotmail.com
0
 

Expert Comment

by:spetrowitsch
ID: 5504344
techtime, chaos50 or funksoul,


Can you email the code as well....I have a similar task to be performed.

thanks!

s.petrowitsch@ce-datronic.com
0
 
LVL 8

Expert Comment

by:Subrat (C++ windows/Linux)
ID: 33461882
hello Everyone(techtime, chaos50 or funksoul,s.petrowitsch@ce-datronic.com),
Can u plz email the same to me by which i'll use it and also keep it here by which no one else who is having same problem, won't tell us to e-mail:).
subrat.net@gmail.com
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

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

Suggested Solutions

For beginner Java programmers or at least those new to the Eclipse IDE, the following tutorial will show some (four) ways in which you can import your Java projects to your Eclipse workbench. Introduction While learning Java can be done with…
Java had always been an easily readable and understandable language.  Some relatively recent changes in the language seem to be changing this pretty fast, and anyone that had not seen any Java code for the last 5 years will possibly have issues unde…
Viewers learn how to read error messages and identify possible mistakes that could cause hours of frustration. Coding is as much about debugging your code as it is about writing it. Define Error Message: Line Numbers: Type of Error: Break Down…
Viewers will learn how to properly install Eclipse with the necessary JDK, and will take a look at an introductory Java program. Download Eclipse installation zip file: Extract files from zip file: Download and install JDK 8: Open Eclipse and …

895 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

14 Experts available now in Live!

Get 1:1 Help Now