黑馬day01(三)xml 的解析方式

來源:互聯網
上載者:User

標籤: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 的解析方式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.