您的位置:首页 > 编程语言

XML编程实例--对xml配置文件中的数据进行增、删、改、查

2014-02-21 01:32 260 查看
import java.io.FileOutputStream;
import java.util.List;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.junit.Test;

public class Dom4jDemo1 {
@Test
public void dom4j1() throws Exception{
//1.创建解析器
SAXReader reader=new SAXReader();
//2.解析xml获取代表整个文档的dom对象
Document dom=reader.read("book.xml");
//3.获取跟元素
Element root= dom.getRootElement();
//4.逐级获取,拿到想要的书名,然后打印出来
String text=root.element("书").element("书名").getText();
System.out.println(text);
}
@Test
public void dom4j2() throws Exception{
//1.创建解析器
SAXReader reader=new SAXReader();
//2.获取代表整个文档的dom对象
Document dom=reader.read("book.xml");
//3.获取根元素
Element root=dom.getRootElement();
//4.获取书名集
List<Element> list=root.elements("书");

String bookName=list.get(1).element("书名").getText();

System.out.println(bookName);
}

@Test
public void add() throws Exception{
//获取解析器
SAXReader reader=new SAXReader();
//解析xml获取dom
Document dom=reader.read("book.xml");
//获取根元素
Element root=dom.getRootElement();
//<特价>20.00</特价>
Element price2Ele=DocumentHelper.createElement("特价");
price2Ele.setText("20.00美元");
//把<特价>20.00</特价>挂载到书下
root.element("书").add(price2Ele);
//写回到xml中
//		Writer write=new OutputStreamWriter(new FileOutputStream("book.xml"),"UTF-8");
//		dom.write(write);
//		write.flush();
//		write.close();

XMLWriter writer = new XMLWriter(new FileOutputStream("book.xml"),OutputFormat.createPrettyPrint());
writer.write(dom);
writer.flush();
writer.close();
}
@Test
public void update()throws Exception{
//获取解析器
SAXReader reader=new SAXReader();
//解析xml获取dom
Document dom=reader.read("book.xml");
//获取跟元素
Element root=dom.getRootElement();
//修改值
root.element("书").element("特价").setText("2.0元");
//更新xml
XMLWriter writer=new XMLWriter(new FileOutputStream("book.xml"),OutputFormat.createPrettyPrint());
writer.write(dom);
writer.close();

}
@Test
public void delete()throws Exception{
//获取解析器
SAXReader reader=new SAXReader();
//解析xml获取dom
Document dom=reader.read("book.xml");
//获取跟元素
Element root=dom.getRootElement();
//删除特价
Element price2=root.element("书").element("特价");
price2.getParent().remove(price2);
//更新xml
XMLWriter writer=new XMLWriter(new FileOutputStream("book.xml"),OutputFormat.createPrettyPrint());
}

@Test
public void add2()throws Exception{
//获取解析器
SAXReader reader=new SAXReader();
//解析xml获取dom
Document dom=reader.read("book.xml");
//获取根元素
Element root=dom.getRootElement();
//凭空创建特价
Element price2Ele=DocumentHelper.createElement("特价");
price2Ele.setText("3.0元");
//插入到指定的位置
List<Element> list=root.element("书").elements();
list.add(1, price2Ele);
//跟新xml
XMLWriter writer=new XMLWriter(new FileOutputStream("book.xml"),OutputFormat.createPrettyPrint());
writer.write(dom);
writer.close();
}

@Test
public void attr()throws Exception{
//获取解析器
SAXReader reader=new SAXReader();
//解析xml获取dom
Document dom=reader.read("book.xml");
//获取跟元素
Element root=dom.getRootElement();

//加属性
//创建属性	出版社="xxx出版社";
Element bookEle=root.element("书");
Attribute attr=DocumentHelper.createAttribute(bookEle, "出版社", "xxx出版社");
//挂载到父标签上
bookEle.add(attr);
bookEle.addAttribute("出版社", "xxx出版社");

//查询属性
Attribute attrr=bookEle.attribute("出版社");
String name=attrr.getName();
String value=attrr.getValue();
System.out.println(name+"..."+value);

//修改属性
bookEle.setAttributeValue("出版社", "xxx出版社");

//删除属性
Attribute attrr1=bookEle.attribute("出版社");
bookEle.remove(attrr1);

//更新xml
XMLWriter writer=new XMLWriter(new FileOutputStream("book.xml"),OutputFormat.createPrettyPrint());
writer.write(dom);
writer.close();
}

}


上面的代码需要第三方的jar包dom4j.jar

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

import org.junit.Test;
import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler;
import org.xml.sax.Locator;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;

public class SaxDemo1 {
//解析方式一
@Test
public void sax1() throws Exception{
//1.创建解析工厂
SAXParserFactory factory=SAXParserFactory.newInstance();
//2.生产解析器
SAXParser parser=factory.newSAXParser();
//3.获取读取器
XMLReader reader=parser.getXMLReader();
//4.设置事件处理器		我采用匿名内部类实现

reader.setContentHandler(new ContentHandler(){

boolean flag=false;
int count=0;
@Override
public void startElement(String uri, String localName, String name,
Attributes atts) throws SAXException {
// TODO Auto-generated method stub
//System.out.println("xml文档开始解析了....");

if("书名".equals(name)){
flag=true;
count++;
}

}

@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
// TODO Auto-generated method stub
if(flag && count==2){
System.out.println(new String(ch,start,length));

}
}

@Override
public void endElement(String uri, String localName, String name)
throws SAXException {
// TODO Auto-generated method stub
//System.out.println("xml文档解析完成了");
if("书名".equals(name)){
flag=false;
}
}
@Override
public void endDocument() throws SAXException {
// TODO Auto-generated method stub

}

@Override
public void endPrefixMapping(String prefix) throws SAXException {
// TODO Auto-generated method stub

}

@Override
public void ignorableWhitespace(char[] ch, int start, int length)
throws SAXException {
// TODO Auto-generated method stub

}

@Override
public void processingInstruction(String target, String data)
throws SAXException {
// TODO Auto-generated method stub

}

@Override
public void setDocumentLocator(Locator locator) {
// TODO Auto-generated method stub

}

@Override
public void skippedEntity(String name) throws SAXException {
// TODO Auto-generated method stub

}

@Override
public void startDocument() throws SAXException {
// TODO Auto-generated method stub

}

@Override
public void startPrefixMapping(String prefix, String uri)
throws SAXException {
// TODO Auto-generated method stub

}

});

//5.解析xml
reader.parse("book.xml");

}

}


配置文件如下:

book.xml

<?xml version="1.0" encoding="UTF-8"?>

<书架>
<书>
<书名>Java就业培训教程</书名>
<特价>3.0元</特价>
<作者>张孝祥</作者>
<售价>39.00元</售价>
</书>
<书>
<书名>JavaScript网页开发</书名>
<作者>张孝祥</作者>
<售价>28.00元</售价>
</书>
</书架>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐