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

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元</售价> 
  </书> 
</书架>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值