xml的解析方法

来源:互联网 发布:淘宝上的补漆笔好用吗 编辑:程序博客网 时间:2024/04/30 03:40

XML的解析方法

先写一个xml文件

(一)Sax

package cn.csdn.sax;

import java.io.IOException;

import javax.xml.parsers.ParserConfigurationException;

import javax.xml.parsers.SAXParser;

import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.Attributes;

import org.xml.sax.SAXException;

import org.xml.sax.XMLReader;

import org.xml.sax.helpers.DefaultHandler;

public class Dome01 {

public static void main(String[] args) {

// 创建解析的工厂

SAXParserFactory spf = SAXParserFactory.newInstance();

// 创建解析器

try {

SAXParser sparser = spf.newSAXParser();

// 创建事件的处理器

XMLReader sreader = sparser.getXMLReader();

// 设置处理器的监听

sreader.setContentHandler(new MyCHandler());

// 加载xml文件、

sreader.parse("src//book.xml");

// 得到m_j的属性

catch (ParserConfigurationException e) {

// TODO Auto-generated catch block

e.printStackTrace();

catch (SAXException e) {

// TODO Auto-generated catch block

e.printStackTrace();

catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

// class MyContentHandler implements ContentHandler{//

class MyContentHandler extends DefaultHandler {

int count = 0;// 计数

@Override

public void characters(char[] ch, int start, int length)

throws SAXException {

// 输出从0开始第二个book标签的author的值

if (count == 2) {

System.out.println(new String(ch, start, length));

}

}

@Override

public void endElement(String uri, String localName, String qName)

throws SAXException {

if (qName.equals("author")) {

count++;

}

}

@Override

public void startElement(String uri, String localName, String qName,

Attributes atts) throws SAXException {

if (qName.equals("author")) {

}

}

}

我专门对DefaultHandler接口进行了分析,如下的这个类,继承了DefaultHandler 接口,在该类中实现了该接口 的所有方法。

package cn.csdn.sax;

import java.io.IOException;

import java.net.ContentHandler;

import java.net.URLConnection;

import org.xml.sax.Attributes;

import org.xml.sax.Locator;

import org.xml.sax.SAXException;

public class MyCHandler extends ContentHandler implements

org.xml.sax.ContentHandler {

@Override

public Object getContent(URLConnection urlc) throws IOException {

// TODO Auto-generated method stub

System.out.println("这里是getContent方法,urlc="+urlc);

return null;

}

@Override

public void characters(char[] ch, int start, int length)

throws SAXException {

// TODO Auto-generated method stub

System.out.println("这里是charaters方法,ch="+ch.length+"    start="+start+"   length="+length);

}

@Override

public void endDocument() throws SAXException {

// TODO Auto-generated method stub

System.out.println("这里是endDocument方法");

}

@Override

public void endElement(String uri, String localName, String qName)

throws SAXException {

// TODO Auto-generated method stub

System.out.println("这里是endElement方法,uri="+uri+"    localName="+localName+"      qName="+qName);

}

@Override

public void endPrefixMapping(String prefix) throws SAXException {

// TODO Auto-generated method stub

System.out.println("这里是endPrefixMapping方法,prefix="+prefix);

}

@Override

public void ignorableWhitespace(char[] ch, int start, int length)

throws SAXException {

// TODO Auto-generated method stub

System.out.println("这里是ignorableWhitespace方法,ch的长度="+ch.length+"    start="+start+"     length="+length);

}

@Override

public void processingInstruction(String target, String data)

throws SAXException {

// TODO Auto-generated method stub

System.out.println("这里是processingInstruction方法,target="+target+"  data="+data);

}

@Override

public void setDocumentLocator(Locator locator) {

// TODO Auto-generated method stub

System.out.println("这里是setDocumentLocator方法,locator="+locator);

}

@Override

public void skippedEntity(String name) throws SAXException {

// TODO Auto-generated method stub

System.out.println("这里是skippedEntity方法, name="+name);

}

@Override

public void startDocument() throws SAXException {

// TODO Auto-generated method stub

System.out.println("这里是starDocument方法");

}

@Override

public void startElement(String uri, String localName, String qName,

Attributes atts) throws SAXException {

// TODO Auto-generated method stub

System.out.println("这里是startElement方法,uri="+uri+"   localName="+localName+"   qName="+qName);

}

@Override

public void startPrefixMapping(String prefix, String uri)

throws SAXException {

// TODO Auto-generated method stub

System.out.println("这里是startPerfixMapping方法,prefix="+prefix+"    uri="+uri);

}

}

运行结果如下:

这里是setDocumentLocator方法,

locator=com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser$LocatorProxy@26d4f1

这里是starDocument方法

这里是startElement方法,uri=   localName=   qName=books

这里是ignorableWhitespace方法,ch的长度=8192    start=249     length=4

这里是startElement方法,uri=   localName=   qName=book

这里是ignorableWhitespace方法,ch的长度=8192    start=260     length=8

这里是startElement方法,uri=   localName=   qName=name

这里是charaters方法,ch=8192    start=274   length=6

这里是endElement方法,uri=    localName=      qName=name

这里是ignorableWhitespace方法,ch的长度=8192    start=288     length=8

这里是startElement方法,uri=   localName=   qName=author

这里是charaters方法,ch=8192    start=304   length=3

这里是endElement方法,uri=    localName=      qName=author

这里是ignorableWhitespace方法,ch的长度=8192    start=317     length=8

这里是startElement方法,uri=   localName=   qName=price

这里是charaters方法,ch=8192    start=332   length=5

这里是endElement方法,uri=    localName=      qName=price

这里是ignorableWhitespace方法,ch的长度=8192    start=346     length=4

这里是endElement方法,uri=    localName=      qName=book

这里是ignorableWhitespace方法,ch的长度=32    start=0     length=8

这里是startElement方法,uri=   localName=   qName=book

这里是ignorableWhitespace方法,ch的长度=8192    start=374     length=8

这里是startElement方法,uri=   localName=   qName=name

这里是charaters方法,ch=8192    start=388   length=7

这里是endElement方法,uri=    localName=      qName=name

这里是ignorableWhitespace方法,ch的长度=8192    start=403     length=8

这里是startElement方法,uri=   localName=   qName=author

这里是charaters方法,ch=8192    start=440   length=4

这里是endElement方法,uri=    localName=      qName=author

这里是ignorableWhitespace方法,ch的长度=8192    start=454     length=8

这里是startElement方法,uri=   localName=   qName=price

这里是charaters方法,ch=8192    start=469   length=5

这里是endElement方法,uri=    localName=      qName=price

这里是ignorableWhitespace方法,ch的长度=8192    start=483     length=4

这里是endElement方法,uri=    localName=      qName=book

这里是ignorableWhitespace方法,ch的长度=8192    start=495     length=4

这里是startElement方法,uri=   localName=   qName=book

这里是ignorableWhitespace方法,ch的长度=8192    start=506     length=8

这里是startElement方法,uri=   localName=   qName=name

这里是charaters方法,ch=8192    start=520   length=7

这里是endElement方法,uri=    localName=      qName=name

这里是ignorableWhitespace方法,ch的长度=8192    start=535     length=8

这里是startElement方法,uri=   localName=   qName=author

这里是charaters方法,ch=8192    start=572   length=12

这里是endElement方法,uri=    localName=      qName=author

这里是ignorableWhitespace方法,ch的长度=8192    start=594     length=8

这里是startElement方法,uri=   localName=   qName=price

这里是charaters方法,ch=8192    start=609   length=5

这里是endElement方法,uri=    localName=      qName=price

这里是ignorableWhitespace方法,ch的长度=8192    start=623     length=4

这里是endElement方法,uri=    localName=      qName=book

这里是ignorableWhitespace方法,ch的长度=8192    start=635     length=4

这里是startElement方法,uri=   localName=   qName=book

这里是ignorableWhitespace方法,ch的长度=8192    start=646     length=8

这里是startElement方法,uri=   localName=   qName=name

这里是charaters方法,ch=8192    start=660   length=7

这里是endElement方法,uri=    localName=      qName=name

这里是ignorableWhitespace方法,ch的长度=8192    start=675     length=8

这里是startElement方法,uri=   localName=   qName=author

这里是charaters方法,ch=8192    start=712   length=4

这里是endElement方法,uri=    localName=      qName=author

这里是ignorableWhitespace方法,ch的长度=8192    start=726     length=8

这里是startElement方法,uri=   localName=   qName=price

这里是charaters方法,ch=8192    start=741   length=5

这里是endElement方法,uri=    localName=      qName=price

这里是ignorableWhitespace方法,ch的长度=8192    start=755     length=4

这里是endElement方法,uri=    localName=      qName=book

这里是ignorableWhitespace方法,ch的长度=32    start=0     length=6

这里是endElement方法,uri=    localName=      qName=books

这里是endDocument方法

(二)Dom4j

package cn.csdn.dom4j;

import java.io.File;

import java.util.Iterator;

import java.util.List;

import org.dom4j.Attribute;

import org.dom4j.Document;

import org.dom4j.DocumentException;

import org.dom4j.Element;

import org.dom4j.io.SAXReader;

public class Dome01 {

public static void main(String[] args) {

// 创建读取器

SAXReader sreader = new SAXReader();

try {

// 根据读取器读取xml文件,获得Document实例

Document document = sreader.read(new File("src//book.xml"));

// 获取根节点

Element element=document.getRootElement();

System.out.println(element.getName());

// 调用迭代方法,分别输出每个节点的值

parser(element);

} catch (DocumentException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

//==================第一种迭代方法=====================

private static void parser(Element element) {

attParser(element);

// 获得element对应的结点集合

List<Element> entities = element.elements();

for(Element entity : entities){

if(entity.isTextOnly()){

attParser(entity);

System.out.println(entity.getName()+"-----"+entity.getText());

}else{

parser(entity);

}

}

}

private static void attParser(Element ele) {

List<Attribute> att = ele.attributes();

for(Attribute entity : att){

System.out.println(entity.getName()+"*********"+entity.getValue());

}

}

}

/*//==================第二种迭代方法=====================

private static void parser(Element element) {

attParser(element);

// TODO Auto-generated method stub

for(Iterator<Element> it=element.elementIterator(); it.hasNext();){

Element ele = it.next();

// 判断是否是只有文本

if(ele.isTextOnly()){

attParser(ele);

System.out.println(ele.getName()+"---------"+ele.getText());

}else{

parser(ele);

}

}

}

private static void attParser(Element ele) {

// TODO Auto-generated method stub

for(Iterator<Attribute> it = ele.attributeIterator(); it.hasNext();){

Attribute att = it.next();

System.out.println(att.getName()+"********"+att.getValue());

}

}

}

*/

XML文档的增删改查

package cn.csdn.dom4j;

import java.io.File;

import java.util.Iterator;

import java.util.List;

import org.dom4j.Attribute;

import org.dom4j.Document;

import org.dom4j.DocumentException;

import org.dom4j.Element;

import org.dom4j.io.SAXReader;

public class Dome01 {

//

public static void main(String[] args) {

// 创建读取器

SAXReader sreader = new SAXReader();

try {

// 根据读取器读取xml文件,获得Document实例

Document document = sreader.read(new File("src//book.xml"));

// 获取根节点

Element element=document.getRootElement();

System.out.println(element.getName());

// 调用迭代方法

parser(element);

} catch (DocumentException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

// 第一种方法迭代输出查询的所有的元素

private static void parser(Element element) {

attParser(element);

// 获得element对应的结点集合

List<Element> entities = element.elements();

for(Element entity : entities){

if(entity.isTextOnly()){

attParser(entity);

System.out.println(entity.getName()+"-----"+entity.getText());

}else{

parser(entity);

}

}

}

private static void attParser(Element ele) {

List<Attribute> att = ele.attributes();

for(Attribute entity : att){

System.out.println(entity.getName()+"*********"+entity.getValue());

}

}

}

/*// 第二种方法迭代输出查询的所有的元素

private static void parser(Element element) {

attParser(element);

// TODO Auto-generated method stub

for(Iterator<Element> it=element.elementIterator(); it.hasNext();){

Element ele = it.next();

// 判断是否是只有文本

if(ele.isTextOnly()){

attParser(ele);

System.out.println(ele.getName()+"---------"+ele.getText());

}else{

parser(ele);

}

}

}

private static void attParser(Element ele) {

// TODO Auto-generated method stub

for(Iterator<Attribute> it = ele.attributeIterator(); it.hasNext();){

Attribute att = it.next();

System.out.println(att.getName()+"********"+att.getValue());

}

}

}

*/

package cn.csdn.dom4j;

import java.io.File;

import java.io.FileWriter;

import java.io.IOException;

import java.util.List;

import org.dom4j.Document;

import org.dom4j.DocumentException;

import org.dom4j.DocumentHelper;

import org.dom4j.Element;

import org.dom4j.io.OutputFormat;

import org.dom4j.io.SAXReader;

import org.dom4j.io.XMLWriter;

public class Dome02 {

//dom4j写、改xml文档

public static void main(String[] args) throws IOException, DocumentException {

/* // 

// ========创建一个xml=========

// 创建一个Document对象,有两种方法

Document document = DocumentHelper.createDocument();

// DocumentFactory df= new DocumentFactory();

// Document doc = df.createDocument();

// 创建根元素

Element root = document.addElement("books");

// 创建其他的元素、

Element book = root.addElement("book");

Element name = book.addElement("name");

name.setText("java开发与设计");

Element price = book.addElement("price");

price.setText("100");

Element author = book.addElement("author");

// 添加属性

author.addAttribute("address", "河北");

author.setText("aa");

// 消除乱码

OutputFormat os = new OutputFormat("  ",true,"GBK");

// 设置要写入的文件

XMLWriter xwriter = new XMLWriter(new FileWriter("src//java_book.xml"),os);

// xml文件

xwriter.write(document);

xwriter.close();

// ======================

*/

/*// ===========插入=====

// 创建一个读xml的实例

SAXReader xreader = new SAXReader();

// 读出xml文档

Document document = xreader.read(new File("src//java_book.xml"));

// 创建一个Element对象

Element sex = DocumentHelper.createElement("sex");

sex.setText("");

// 根据document对象,创建一个需要插入的element对象

Element root = document.getRootElement();

// 获得book的所有属性

List list = root.element("book").elements();

//

list.add(2,sex);

// 写入xml文件中

XMLWriter writer = new XMLWriter(new FileWriter("src//java_book.xml"),new OutputFormat("",true,"GBK"));

writer.write(document);

writer.close();*/

// ============删除========

// 获得读的对象

SAXReader sreader = new SAXReader();

// 创建Document对象

Document doc=sreader.read(new File("src//java_book.xml"));

// 获得根结点

Element root = doc.getRootElement();

// 获得要删除的结点的父结点

Element book = root.element("book");

// 获得要删除的结点

Element sex = book.element("sex");

// 删除sex结点

book.remove(sex);

// 写入xml文件中

XMLWriter writer = new XMLWriter(new FileWriter("src//java_book.xml"),new OutputFormat("",true,"GBK"));

writer.write(doc);

writer.close();

}

}

原创粉丝点击