Java XML parsing

Source: Internet
Author: User
Tags class manager

One, Sax generates and parses XML documents

1. Introduction

Sax has emerged to solve the DOM problem. SAX, event-driven. When the parser discovers the start of an element, the end of an element, text, the beginning or end of a document, and so on, the programmer writes the code that responds to these events and saves the data.

Pros: No need to transfer the entire document in advance, consume less resources, SAX parser code is smaller than DOM parser code, suitable for applets, download.

Cons: not persistent; After the event, if the data is not saved, then the data is lost, stateless, only the text can be obtained from the event, but I do not know which element the text belongs to;

Application: Applet; Only a small amount of XML documents, seldom go back to visit; less machine memory;

2. Sax parsing XML steps

(1) Establishing the interface XmlDocument, stipulating the function that the analytic class needs to realize;

Code:

Package com.xml;

Import java.util.List;

Import Com.xml.domain.Stuff;

Public interface XmlDocument {
/**
* Create an XML document
* @param filename File full path name
*/
public void Createxml (String filename,list<stuff> stufflist);
public void Createxml (String fileName);
/**
* Parsing XML documents
* @param filename File full path name
*/
public void Parserxml (String fileName);
}

(2) Writing implementation class Saxdemo

Code:

Package com.xml;

Import Java.io.File;
Import Java.io.FileInputStream;
Import java.io.FileNotFoundException;
Import Java.io.FileOutputStream;
Import java.io.IOException;
Import Java.io.InputStream;
Import java.util.ArrayList;
Import java.util.List;

Import Javax.xml.parsers.DocumentBuilder;
Import Javax.xml.parsers.DocumentBuilderFactory;
Import javax.xml.parsers.ParserConfigurationException;
Import Javax.xml.parsers.SAXParser;
Import Javax.xml.parsers.SAXParserFactory;
Import Javax.xml.transform.OutputKeys;
Import Javax.xml.transform.Result;
Import Javax.xml.transform.Transformer;
Import Javax.xml.transform.sax.SAXTransformerFactory;
Import Javax.xml.transform.sax.TransformerHandler;
Import Javax.xml.transform.stream.StreamResult;

Import org.w3c.dom.NodeList;
Import org.xml.sax.Attributes;
Import org.xml.sax.SAXException;
Import Org.xml.sax.helpers.AttributesImpl;
Import Org.xml.sax.helpers.DefaultHandler;

Import Com.xml.domain.Employee;
Import Com.xml.domain.Manager;
Import Com.xml.domain.Stuff;

/**
*
* @2.sax generate and parse XML documents
*/

public class Saxdemo implements XmlDocument {
Final static String Filenmae = "F:\\java\\workspace\\mytest\\src\\com\\xml\\myxml.xml";

public static void Main (String args[]) {
Saxdemo sax = new Saxdemo ();
list<stuff> stufflist = new arraylist<stuff> ();
Stufflist.add (New Manager ("Cxli", "Male", "10k", "hight"));
Stufflist.add (New Manager ("Randy", "Male", "10k", "middle"));
Stufflist.add (New Employee ("Fengzi", "Male", "6k"));
Stufflist.add (New Employee ("saoxing", "Male", "6k"));

Sax.createxml (Filenmae, stufflist);
Sax.parserxml (Filenmae);
}

Creating XML

public void Createxml (String fileName, list<stuff> stufflist) {
Result resultxml = null;
File XMLFile = new file (fileName);
if (xmlfile.exists ()) {
Xmlfile.delete ();
}
try {
Resultxml = new Streamresult (new FileOutputStream (FileName));
Saxtransformerfactory SFF = (saxtransformerfactory) saxtransformerfactory.newinstance ();
Transformerhandler th = Sff.newtransformerhandler ();
Th.setresult (Resultxml);

Transformer Transformer = Th.gettransformer ();
Transformer.setoutputproperty (outputkeys.encoding, "UTF-8"); The encoding format is UTF-8
Transformer.setoutputproperty (outputkeys.indent, "yes"); Line break
Attributesimpl attr = new Attributesimpl ();

Th.startdocument ();//Document Start
Th.startelement ("", "", "stuffs", attr);
for (Stuff stuff:stufflist) {
if (stuff instanceof Manager) {
Th.startelement ("", "", "managers", attr);
Writeelement (Th, attr, stuff);
Th.endelement ("", "" "," managers ");
} else if (stuff instanceof Employee) {
Th.startelement ("", "", "Employees", attr);
Writeelement (Th, attr, stuff);
Th.endelement ("", "" "," employees ");
}
}
Th.endelement ("", "" "," stuffs ");
Th.enddocument (); End of document
} catch (Exception e) {
E.printstacktrace ();
}

}

Parsing xml

public void Parserxml (String fileName) {
SAXParserFactory SAXFAC = Saxparserfactory.newinstance ();
try {
SAXParser saxparser = Saxfac.newsaxparser ();
InputStream is = new FileInputStream (fileName);
Saxparser.parse (IS, new Mysaxhandler ());
} catch (Parserconfigurationexception e) {
E.printstacktrace ();
} catch (Saxexception e) {
E.printstacktrace ();
} catch (FileNotFoundException e) {
E.printstacktrace ();
} catch (IOException e) {
E.printstacktrace ();
}
}

@Override
public void Createxml (String fileName) {
}

public void writeelement (Transformerhandler th, Attributesimpl attr,stuff Stuff) throws Saxexception {

If (Stuff instanceof Manager) {
Manager manager = (manager) stuff;
Th.startelement ("," "," "Manager", attr);
Th.startelement ("," "," "name", attr);
Th.characters (Manager.getname (). ToCharArray (), 0, Manager.getname (). Length ());
Th.endelement ("", "", "name");
Th.startelement ("", "", "Sex", attr);
Th.characters (Manager.getsex (). ToCharArray (), 0, Manager.getsex (). Length ());
Th.endelement ("", "", "sex");
Th.startelement ("", "", "Age", attr);
Th.characters (((Manager.getage ()) + ""). ToCharArray (), 0, ((manager.getage ()) + ""). Length ());
Th.endelement ("", "", "Age");
Th.startelement ("," "," Salery ", attr);
Th.characters (Manager.getsalery (). ToCharArray (), 0, Manager.getsalery (). Length ());
Th.endelement ("", "", "Salery");
Th.startelement ("", "", "priority", attr);
Th.characters (Manager.getpriority (). ToCharArray (), 0, manager.getpriority (). Length ());
Th.endelement ("", "", "priority");
Th.endelement ("", "", "manager");

} else if (stuff instanceof Employee) {
Employee employee = (employee) stuff;

Th.startelement ("," "," "Employee", attr);
Th.startelement ("", "", "" name ", attr);
Th.characters (Employee.getname (). ToCharArray (), 0, Employee.getname (). Length ());
Th.endelement ("," "," "name");
Th.startelement ("", "", "Sex", attr);
Th.characters (Employee.getsex (). ToCharArray (), 0, "male". Length ());
Th.endelement ("", "" "," sex ");
Th.startelement ("", "", "Age", attr);
Th.characters (((Employee.getage ()) + ""). ToCharArray (), 0, ((employee.getage ()) + ""). Length ());
Th.endelement ("", "", "Age");
Th.startelement ("", "", "Salery", attr);
Th.characters (Employee.getsalery (). ToCharArray (), 0, Employee.getsalery (). Length ());
Th.endelement ("", "" "," Salery ");
Th.endelement ("," "," "Employee");

}

}

public void Dealwithnode (string fileName, String nodeName) {
Documentbuilderfactory factory = Documentbuilderfactory.newinstance ();
Org.w3c.dom.Document Document = null;
try {
Documentbuilder builder = Factory.newdocumentbuilder ();
Document = Builder.newdocument ();
Document = Builder.parse (new File);
} catch (Exception e) {
E.printstacktrace ();
}
NodeList links = document.getelementsbytagname (nodeName);
for (int i = 1; i < Links.getlength ()-1; i++) {
}
}
}

Class Mysaxhandler extends DefaultHandler {
public Boolean hasattribute = false;
Public Attributes Attributes = null;
public FileOutputStream fos = null;
public StringBuilder SB = null;
File myXMLfile = null;

public void Startdocument () throws Saxexception {
SYSTEM.OUT.PRINTLN ("The document begins to print");
}

public void Enddocument () throws Saxexception {
System.out.println ("Document printing finished");
}

public void Startelement (string uri, String localname, String Qname,attributes Attributes) throws Saxexception {
if (Qname.equals ("Employees")) {
myXMLfile = new File (
"F:\\java\\workspace\\mytest\\src\\com\\xml\\employees.xml");
SB = new StringBuilder ();
Sb.append ("<?xml version= ' 1.0 ' encoding= ' UTF-8 '? >\n");
} else if (Qname.equals ("managers")) {
myXMLfile = new File (
"F:\\java\\workspace\\mytest\\src\\com\\xml\\managers.xml");
SB = new StringBuilder ();
Sb.append ("<?xml version= ' 1.0 ' encoding= ' UTF-8 '? >\n");
}
Dealwithstartelement (QName);

if (attributes.getlength () > 0) {
this.attributes = attributes;
This.hasattribute = true;
}
}

public void EndElement (string uri, String localname, String qName) throws Saxexception {
Dealwithendelement (QName);
if (Qname.equals ("Employees") | | | qname.equals ("managers")) {
try {
FOS = new FileOutputStream (myXMLfile);
Fos.write (Sb.tostring (). GetBytes ());
} catch (Exception E1) {
E1.printstacktrace ();
}
}
if (Hasattribute && (Attributes! = null)) {
for (int i = 0; i < attributes.getlength (); i++) {
System.out.print (attributes.getvalue (0));
}
}

}

public void characters (char[] ch, int start, int length) throws Saxexception {
System.out.print (New String (CH, start, length));
string character = new String (ch, start, length);
if (! ( Character.equals ("\ n"))) {
Sb.append ((New String (CH, start, length));
}
}

public void Dealwithstartelement (String qName) {
if ((Qname.equals ("Employees")) | | (Qname.equals ("managers")) | | (Qname.equals ("employee")) | | (Qname.equals ("manager"))) {
System.out.print ("<" + QName + ">");
Sb.append ("<" + QName + ">" + "\ n");
}
if ((Qname.equals ("name")) | | (Qname.equals ("Sex")) | | (Qname.equals ("Age")) | | (Qname.equals ("Salery")) | | (Qname.equals ("priority"))) {
System.out.print ("<" + QName + ">");
Sb.append ("<" + QName + ">");
}
}

public void Dealwithendelement (String qName) {
if ((Qname.equals ("Employees")) | | (Qname.equals ("managers"))
|| (Qname.equals ("employee")) | | (Qname.equals ("manager"))
|| (Qname.equals ("name")) | | (Qname.equals ("Sex"))
|| (Qname.equals ("Age")) | | (Qname.equals ("Salery"))
|| (Qname.equals ("priority"))) {
System.out.print ("</" + QName + ">");
Sb.append ("</" + QName + ">" + "\ n");
}
}
}

(3) Related preparatory work

The last generated XML is as follows:

<?xml version= "1.0" encoding= "UTF-8",
<stuffs>
<managers>
<manager>
< Name>cxli</name>
<sex>male</sex>
<age>23</age>
<salery>10k< /salery>
<priority>hight</priority>
</manager>
<manager>
<name> Randy</name>
<sex>male</sex>
<age>23</age>
<salery>10k</salery
<priority>middle</priority>
</manager>
</managers>
<employees>
<employee>
<name>fengzi</name>
<sex>male</sex>
<age>23</ Age>
<salery>6k</salery>
</employee>
<employee>
<name>saoxing< /name>
<sex>male</sex>
<age>23</age>
<salery>6k</salery>
</employee>
</employees>
</stuffs>

From the XML above, we can see that stored information stuff information, specifically divided into manager and employee. Therefore, we can say that the information stored in XML is abstracted into Java classes, namely the manager class and the employee class; they all implement interface stuff. The code is as follows:

Stuff Connection:

Package com.xml.domain;
/**
*
* @author the Wind son
* Employee Interface
*
*/
Public interface Stuff {}

Manager class:

Package com.xml.domain;

public class Manager implements stuff{
private String name;
Private String sex;
private int age;
Private String Salery;
Private String priority;

Public Manager (string name, string sex, int. int, string salery,string priority) {
THIS.name = name;
This.sex = sex;
This.age = age;
This.salery = Salery;
This.priority = priority;
}

Public String GetName () {
return name;
}

public void SetName (String name) {
THIS.name = name;
}

Public String Getsex () {
return sex;
}

public void Setsex (String sex) {
This.sex = sex;
}

public int getage () {
return age;
}

public void Setage (int.) {
This.age = age;
}

Public String Getsalery () {
return salery;
}

public void Setsalery (String salery) {
This.salery = Salery;
}

Public String getpriority () {
return priority;
}

public void SetPriority (String priority) {
This.priority = priority;
}

}

Employee class:

Package com.xml.domain;

public class Employee implements stuff{
private String name;
Private String sex;
private int age;
Private String Salery;
Public Employee (string name, String sex, Int. age, String salery) {
THIS.name = name;
This.sex = sex;
This.age = age;
This.salery = Salery;
}
Public String GetName () {
return name;
}
public void SetName (String name) {
THIS.name = name;
}
Public String Getsex () {
return sex;
}
public void Setsex (String sex) {
This.sex = sex;
}
public int getage () {
return age;
}
public void Setage (int.) {
This.age = age;
}
Public String Getsalery () {
return salery;
}
public void Setsalery (String salery) {
This.salery = Salery;
}

}

Ii. Dom Generation and parsing of XML documents

Java XML parsing

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.