xml解析的四种方式

来源:互联网 发布:linux删除数据库命令 编辑:程序博客网 时间:2024/05/02 08:15

待解析的xml文件

<?xml version="1.0" encoding="UTF-8"?>
<user>
<name>admin</name>
<sex>123</sex>
<age>123</age>

<name>admin</name>
<sex>123</sex>
<age>123</age>

</user>
第一种方式sax 需要自己处理

文件1 package com.norteksoft.xml;

import java.io.File;
import java.io.IOException;
import java.net.URL;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.SAXException;

public class ParseUserXml {


private static String XMLPATH ="";
private static ParseUserXml p=new ParseUserXml();

private ParseUserXml()
{


}
public static ParseUserXml getInstance()
{

XMLPATH =p.getClass().getResource("UserInfo.xml").getPath();
System.out.println("filePath:=="+XMLPATH);
System.out.println("/n");
return p;
}

public String pasrseXML() throws ParserConfigurationException,
SAXException, IOException

{
File xmlfile = new File(XMLPATH);
SAXParserFactory factory = SAXParserFactory.newInstance();
factory.setValidating(false);
SAXParser saxParse = factory.newSAXParser();

// XmlHandler xmlHandler=new XmlHandler(user);

saxParse.parse(xmlfile, new SaxXmlHandler());

// System.out.println("返回值为:/n"+xmlHandler.getUser());

return null;
}
}

文件2

package com.norteksoft.xml;

import java.util.Stack;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class SaxXmlHandler extends DefaultHandler

{
Stack tags=new Stack();

public void startDocument() throws SAXException
{
System.out.println("~~~~~~~~~开始解析文档~~~~~~~~~~~~~");
super.startDocument();
}

public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException
{
System.out.println("-----开始解析"+qName+"----");
tags.push(qName);
super.startElement(uri, localName, qName, attributes);
}

public void characters(char[] ch, int start, int length) throws SAXException
{
String value=new String(ch,start,length);
String tag=(String) tags.peek();
if(tag.equals("name"))
{
System.out.println("name="+value);
}
else if (tag.equals("age"))
{
System.out.println("age="+value);
}
else if(tag.equals("sex"))
{
System.out.println("sex="+value);
}
else
{
System.out.println(";value="+";"+tag+"没有匹配到!");
}
super.characters(ch, start, length);
}
public void endElement(String uri, String localName, String qName) throws SAXException
{
System.out.println("-----结束解析"+qName+"----");

tags.pop();

super.endElement(uri, localName, qName);
}
public void endDocument() throws SAXException
{
System.out.println("~~~~~~~~~结束解析文档~~~~~~~~~~~~~");
super.endDocument();
}
}
方式2:dom 解析

package com.norteksoft.xml;

import java.io.File;
import java.io.IOException;
import java.net.URL;

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.SAXException;

public class MyDomXmlReader
{
static User[] users;

public MyDomXmlReader()
{
super();

}

private static void parseXmlWithEception() throws ParserConfigurationException, SAXException, IOException
{
URL url=MyDomXmlReader.class.getResource("UserInfo.xml");

File file=new File(url.getPath());

DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
DocumentBuilder builder=factory.newDocumentBuilder();

Document doc =builder.parse(file);

NodeList nodes=doc.getElementsByTagName("user");
users=new User[nodes.getLength()];
String name=null;
String age=null;
String sex=null;
System.out.println("begin");
for(int i=0;i<nodes.getLength();i++)
{
System.out.println("i===="+i+"-------");

NodeList nl=((Node)nodes.item(i)).getChildNodes();

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

System.out.println("j=="+j+"/n "+nl.item(j).getNodeName());
}
// String temp= ((Node)nodes.item(i)).getChildNodes().getLength()+";";

// System.out.println("temp====="+temp);

name=doc.getElementsByTagName("name").item(i).getFirstChild().getNodeValue();

// System.out.println("name="+name);

age=doc.getElementsByTagName("age").item(i).getFirstChild().getNodeValue();
// System.out.println("age="+age);

sex=doc.getElementsByTagName("sex").item(i).getFirstChild().getNodeValue();
// System.out.println("sex="+sex);

users=new User(age,name,sex);


}
System.out.print("end");


}
public static void parseXml()
{
try
{
parseXmlWithEception();
}catch (Exception e)
{
e.printStackTrace();
}
}

public static User[] returnValue()
{
parseXml();
return users;
}


}

方式3: JDom

package com.norteksoft.xml;

import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.List;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;

public class MyJDomXml
{

public MyJDomXml()
{
super();
}

public static void parseXmlThowException() throws JDOMException, IOException
{
URL url=MyJDomXml.class.getResource("UserInfo.xml");

File file=new File(url.getPath());

SAXBuilder builder = new SAXBuilder();
Document doc = builder.build(file);

Element root = doc.getRootElement();

List allChildren = root.getChildren();

for(int i=0;i<allChildren.size();i++)
{
Element foo=(Element) allChildren.get(i);

System.out.println(foo.getName()+"==="+foo.getName());

System.out.println("name="+foo.getChild("name").getText());
System.out.println("age="+foo.getChild("age").getText());
System.out.println("sex="+foo.getChild("sex").getText());
}


}


public static void parseXml()
{
try {
parseXmlThowException();
} catch (JDOMException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

}


方式4 dom4j

package com.norteksoft.xml;

import java.io.File;
import java.net.MalformedURLException;

import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class MyDom4JXmlReader
{

public MyDom4JXmlReader()
{
super();

}

private static void parseXmlThrowException() throws MalformedURLException, DocumentException
{
String path=MyDom4JXmlReader.class.getResource("UserInfo.xml").getPath();

File f = new File(path);

SAXReader reader = new SAXReader();

Document doc = reader.read(f);

Element root=doc.getRootElement();

Element foo;

List list=root.elements();
for(int i=0;i<list.size();i++)
{

foo=(Element) list.get(i);
System.out.println("name="+foo.elementText("name"));
System.out.println("age="+foo.elementText("age"));
System.out.println("sex="+foo.elementText("sex"));


}
/*for(Iterator it= root.elementIterator("user");it.hasNext();)
{
foo=(Element) it.next();

System.out.println("name="+foo.elementText("name"));
System.out.println("age="+foo.elementText("age"));
System.out.println("sex="+foo.elementText("sex"));


}*/


}
public static void praseXml()
{

try {
parseXmlThrowException();
} catch (MalformedURLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} catch (DocumentException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}

}
}

原创粉丝点击