標籤:xml
XML編程:利用java程式去增刪改查(CRUD)xml中的資料
解析思想:
dom解析
sax解析
基於這兩種解析思想市面上就有了很多的解析api
sun jaxp既有dom方式也有sax方式,並且這套解析api已經加入到j2se的規範中,意味這不需要匯入任何第三方開發包就可以直接使用這種解析方式.但是這種解析方式效率低下,沒什麼人用.
dom4j 可以使用dom方式高效的解析xml.
pull
!!dom4j
匯入開發包,通常只需要匯入核心包就可以了,如果在使用的過程中提示少什麼包到lib目錄下在匯入缺少的包即可
解析的xml檔案:
<?xml version="1.0" encoding="UTF-8"?><書架> <書 出版社="北京出版社"> <書名>Java就業培訓教程</書名> <作者>張孝祥</作者> <售價>50.00元</售價> <特價>20.0元</特價> </書> <書> <書名>JavaScript網頁開發</書名> <作者>張孝祥</作者> <售價>40.00元</售價> </書> </書架>
SAX解析方式:
package sax;import javax.xml.parsers.ParserConfigurationException;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;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;import org.xml.sax.helpers.DefaultHandler;public class SaxDemo1 {public static void main(String[] args) throws Exception {//解析器工廠SAXParserFactory factory=SAXParserFactory.newInstance();//sax解析器SAXParser parser = factory.newSAXParser();//擷取讀取器XMLReader reader = parser.getXMLReader();//註冊事件reader.setContentHandler(new MyContentHander2());//解析xml文檔reader.parse("book.xml");}}//讀取第二本書的價格class MyContentHander2 extends DefaultHandler{private String eleName="";private int count=0;@Overridepublic void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException {super.startElement(uri, localName, qName, attributes);this.eleName=qName;}@Overridepublic void endElement(String uri, String localName, String qName)throws SAXException {super.endElement(uri, localName, qName);eleName="";}@Overridepublic void characters(char[] ch, int start, int length)throws SAXException {super.characters(ch, start, length);if("書名".equals(eleName)&&++count==2){System.out.println(new String(ch,start,length));}}}class MyContentHander implements ContentHandler{@Overridepublic void setDocumentLocator(Locator locator) {// TODO Auto-generated method stub}@Overridepublic void startDocument() throws SAXException {// TODO Auto-generated method stubSystem.out.println("開始讀取文檔....");}@Overridepublic void endDocument() throws SAXException {// TODO Auto-generated method stubSystem.out.println("結束讀取文檔....");}@Overridepublic void startPrefixMapping(String prefix, String uri)throws SAXException {// TODO Auto-generated method stub}@Overridepublic void endPrefixMapping(String prefix) throws SAXException {// TODO Auto-generated method stub}@Overridepublic void startElement(String uri, String localName, String qName,Attributes atts) throws SAXException {// TODO Auto-generated method stubSystem.out.println("發現開始標籤,"+qName);}@Overridepublic void endElement(String uri, String localName, String qName)throws SAXException {// TODO Auto-generated method stubSystem.out.println("結束考試標籤,"+qName);}@Overridepublic void characters(char[] ch, int start, int length)throws SAXException {// TODO Auto-generated method stubSystem.out.println(new String(ch, start, length));}@Overridepublic void ignorableWhitespace(char[] ch, int start, int length)throws SAXException {// TODO Auto-generated method stub}@Overridepublic void processingInstruction(String target, String data)throws SAXException {// TODO Auto-generated method stub}@Overridepublic void skippedEntity(String name) throws SAXException {// TODO Auto-generated method stub}}
dom4j解析:
package dom4j;import java.io.FileOutputStream;import java.util.List;import org.dom4j.Attribute;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;import org.junit.Test;public class Dom4jDemo {@Testpublic void attr() throws Exception{SAXReader reader=new SAXReader();Document doc = reader.read("book.xml");Element rootElement = doc.getRootElement();Element attribute = rootElement.element("書").addAttribute("出版社", "北京出版社");XMLWriter writer = new XMLWriter(new FileOutputStream("book.xml"),OutputFormat.createPrettyPrint());writer.write(doc);writer.close();}@Testpublic void add()throws Exception{SAXReader reader=new SAXReader();Document doc = reader.read("book.xml");Element rootElement = doc.getRootElement();//憑空建立Element Telement = DocumentHelper.createElement("特價");Telement.setText("20.0元");//掛載rootElement.element("書").add(Telement);XMLWriter writer = new XMLWriter(new FileOutputStream("book.xml"),OutputFormat.createPrettyPrint());writer.write(doc);writer.close();}@Testpublic void delete()throws Exception{SAXReader reader=new SAXReader();Document doc = reader.read("book.xml");Element rootElement = doc.getRootElement();Element element = rootElement.element("書").element("特價");element.getParent().remove(element);XMLWriter writer = new XMLWriter(new FileOutputStream("book.xml"),OutputFormat.createPrettyPrint());writer.write(doc);writer.close();}@Testpublic void update() throws Exception{//dom4j解析器SAXReader reader=new SAXReader();//得到documentDocument doc = reader.read("book.xml");//得到根項目Element rootElement = doc.getRootElement();List<Element> elements = rootElement.elements();Element element = elements.get(0);element.element("售價").setText("50.00元");XMLWriter writer = new XMLWriter(new FileOutputStream("book.xml"),OutputFormat.createPrettyPrint());writer.write(doc);writer.close();}@Testpublic void find() throws Exception{//dom4j解析器SAXReader reader=new SAXReader();//得到documentDocument doc = reader.read("book.xml");//得到根項目Element rootElement = doc.getRootElement();List<Element> elements = rootElement.elements();Element element = elements.get(1);System.out.println(element.element("書名").getText());}}
黑馬day01(三)xml 的解析方式