File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
http://aspose.com/file-tools
The moose likes Java in General and the fly likes XML Parsing problem Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of Android Security Essentials Live Lessons this week in the Android forum!
JavaRanch » Java Forums » Java » Java in General
Bookmark "XML Parsing problem" Watch "XML Parsing problem" New topic
Author

XML Parsing problem

Balasubramanian Chandrasekaran
Ranch Hand

Joined: Nov 28, 2007
Posts: 215

Again got into trouble. This time i am not able to find out one sequence while parsing a XML document. Here is the problem

My java parser code is:



and the XML file which i am passing as argument while running the code is


Now my problem is when i execute the program i am getting this sequence as output


Whenever it finds a TEXTNODE i am printing that node value.But,while parsing i noticed that the code is not able to identify closing tags(i.e.,)Once a <view> is parsed i can able to see view in my console but the same is not happening in the case of </view>.

In what way i have to change the code to get that recognized?
K.Suresh Kumar
Ranch Hand

Joined: Nov 21, 2007
Posts: 41
Hi ,

The following code will useful to you......


//Example XML document
/*
An XML Document Containing a Simple Contact List

<?xml version="1.0" standalone="yes"?>

<folks>
<person>
<phone>306 555-9999</phone>
<email>joe@webserver.net</email>
<name>Yin, Joe</name>
</person>
<person>
<phone>704 555-0000</phone>
<name>Pet, Rob</name>
<email>rob@server.com</email>
</person>
</folks>

*/

import java.io.IOException;

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

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.ErrorHandler;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;

public class DOMDump {
static public void main(String[] arg) {
String filename = null;
boolean validate = false;

if (arg.length == 1) {
filename = arg[0];
} else if (arg.length == 2) {
if (!arg[0].equals("-v"))
usage();
validate = true;
filename = arg[1];
} else {
usage();
}

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setValidating(validate);
dbf.setNamespaceAware(true);
dbf.setIgnoringElementContentWhitespace(true);

// Parse the input to produce a parse tree with its root
// in the form of a Document object
Document doc = null;
try {
DocumentBuilder builder = dbf.newDocumentBuilder();
builder.setErrorHandler(new MyErrorHandler());
InputSource is = new InputSource(filename);
doc = builder.parse(is);
} catch (SAXException e) {
System.exit(1);
} catch (ParserConfigurationException e) {
System.err.println(e);
System.exit(1);
} catch (IOException e) {
System.err.println(e);
System.exit(1);
}

// Use a TreeDumper to list the tree
TreeDumper td = new TreeDumper();
td.dump(doc);
}

private static void usage() {
System.err.println("Usage: DOMCheck [-v] <filename>");
System.exit(1);
}
}
class TreeDumper {
public void dump(Document doc) {
dumpLoop((Node)doc,"");
}
private void dumpLoop(Node node,String indent) {
switch(node.getNodeType()) {
case Node.CDATA_SECTION_NODE:
System.out.println(indent + "CDATA_SECTION_NODE");
break;
case Node.COMMENT_NODE:
System.out.println(indent + "COMMENT_NODE");
break;
case Node.DOCUMENT_FRAGMENT_NODE:
System.out.println(indent + "DOCUMENT_FRAGMENT_NODE");
break;
case Node.DOCUMENT_NODE:
System.out.println(indent + "DOCUMENT_NODE");
break;
case Node.DOCUMENT_TYPE_NODE:
System.out.println(indent + "DOCUMENT_TYPE_NODE");
break;
case Node.ELEMENT_NODE:
System.out.println(indent + "ELEMENT_NODE");
break;
case Node.ENTITY_NODE:
System.out.println(indent + "ENTITY_NODE");
break;
case Node.ENTITY_REFERENCE_NODE:
System.out.println(indent + "ENTITY_REFERENCE_NODE");
break;
case Node.NOTATION_NODE:
System.out.println(indent + "NOTATION_NODE");
break;
case Node.PROCESSING_INSTRUCTION_NODE:
System.out.println(indent + "PROCESSING_INSTRUCTION_NODE");
break;
case Node.TEXT_NODE:
System.out.println(indent + "TEXT_NODE");
break;
default:
System.out.println(indent + "Unknown node");
break;
}

NodeList list = node.getChildNodes();
for(int i=0; i<list.getLength(); i++)
dumpLoop(list.item(i),indent + " ");

}
}
class MyErrorHandler implements ErrorHandler {
public void warning(SAXParseException e) throws SAXException {
show("Warning", e);
throw (e);
}

public void error(SAXParseException e) throws SAXException {
show("Error", e);
throw (e);
}

public void fatalError(SAXParseException e) throws SAXException {
show("Fatal Error", e);
throw (e);
}

private void show(String type, SAXParseException e) {
System.out.println(type + ": " + e.getMessage());
System.out.println("Line " + e.getLineNumber() + " Column "
+ e.getColumnNumber());
System.out.println("System ID: " + e.getSystemId());
}
}


Regards,
Suresh Kumar.K
Paul Clapham
Bartender

Joined: Oct 14, 2005
Posts: 18541
    
    8

That's very strange. You have code that prints out the value of text nodes, but you claim it prints out element names. It looks like you aren't running the code you posted.
Balasubramanian Chandrasekaran
Ranch Hand

Joined: Nov 28, 2007
Posts: 215

Thanks Suresh Kumar for your code.
But, i want to figure out in what way i have to change the code which i wrote to solve my problem.

Regarding Paul's Reply:
I just want to print the node name's (i.e.,) Whenever i parse a node <view> then i must get a view printed in console.But,the same thing is not happening when i parse </view> node.Then how can i recognize the closing tags in XML.
Bert Bates
author
Sheriff

Joined: Oct 14, 2002
Posts: 8803
    
    5
this one is off to the intermediate forum


Spot false dilemmas now, ask me how!
(If you're not on the edge, you're taking up too much room.)
William Brogden
Author and all-around good cowpoke
Rancher

Joined: Mar 22, 2000
Posts: 12761
    
    5
You are manipulating a DOM - DOM models automatically take care of closing tag logic when a NODE is created. Thus, when you have finished with the contents of a NODE there is nothing left to do.

It is the SAX and StAX parsing models that give you specific events for closing tags.

Bill
Balasubramanian Chandrasekaran
Ranch Hand

Joined: Nov 28, 2007
Posts: 215

Originally posted by William Brogden:
You are manipulating a DOM - DOM models automatically take care of closing tag logic when a NODE is created. Thus, when you have finished with the contents of a NODE there is nothing left to do.

It is the SAX and StAX parsing models that give you specific events for closing tags.

Bill


Ya thanks William,

I figured it out after searching a little and finished implementing SAX Parser for my requirement and its works great now.
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: XML Parsing problem
 
Similar Threads
Getting all child element from root element
How to retrieve CDATA Section
How to change this java file into jsp?
parsing the XML tags values having the same name
An exception in java-XML --kindly clarify-urgent