java EE開發之Servlet第五課:xml解析
1. xml簡單介紹
資料儲存:資料庫做儲存存在分析和對比,XML做資料儲存更加簡潔。
資料交換: XML在跨平臺、跨語言
資料配置:XML配置快捷、簡單
2. DOM(Document Ojbect Modal)解析步驟
2.1 讀取
DocumentBuilderFactory->DocumentBuilder->Document
2.2 建立並輸出
2.3 XML文件的CRUD操作
3. DOM常見操作
1,讀取XML檔案中的內容
//讀取XML檔案中的內容
//建立一個公司
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
//建立隊伍
DocumentBuilder bui=factory.newDocumentBuilder();
//獲取資源(即你要去哪兒讀取資料)
Class c=Class.forName("ReadXML");//forName(本類的名稱)
InputStream in=c.getResourceAsStream("Stu.xml");
//建立樹
Document doc= bui.parse(in);
in.close();
//取出<stu>節點
NodeList nodes=doc.getElementsByTagName("stu");
for(int i=0;i<nodes.getLength();i++){
//取出<stu>節點的id屬性值
Element e=(Element)nodes.item(i);
String id=e.getAttribute("id");
//根據<stu>節點取到<stu>節點下的<name>節點
NodeList nodeList=e.getElementsByTagName("name");
//取出<name>節點下的值
Element el=(Element)nodeList.item(0);
String name=el.getTextContent();
2,往XMl中寫入資訊
//建立公司
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
//建立隊伍
DocumentBuilder bui=factory.newDocumentBuilder();
//建立文件物件
Document doc=bui.newDocument();
//設定版本
doc.setXmlVersion("1.0");
//寫入根節點
Element root=doc.createElement("teacher");
doc.appendChild(root);
Scanner input=new Scanner(System.in);
for(int i=0;i<3;i++){
//建立<tea>節點
Element tea=doc.createElement("tea");
System.out.println("請輸入老師的編號:");
String id=input.next();
tea.setAttribute("id", id);
//加入屬性和<name>節點
Element name=doc.createElement("name");
System.out.println("請輸入老師的姓名:");
String n=input.next();
name.setTextContent(n);
tea.appendChild(name);
root.appendChild(tea);
}
//儲存XML檔案也可呼叫SaveXML()方法
TransformerFactory fac=TransformerFactory.newInstance();
Transformer tf=fac.newTransformer();
DOMSource source=new DOMSource(doc);
StreamResult result=new StreamResult("f:/teas.xml");
tf.transform(source, result);
3,修改XMl中的資訊
//呼叫得到DOC的方法
Document doc=getDoc();
NodeList nodeList=doc.getElementsByTagName("tea");
for(int i=0;i<nodeList.getLength();i++){
Element el=(Element)nodeList.item(i);
String id=el.getAttribute("id");
if(id.equals(tea.getId())){
NodeList nodes=el.getElementsByTagName("name");
Element name=(Element)nodes.item(0);
name.setTextContent(tea.getName());
break;
}
}
//呼叫儲存的方法
SaveXML(doc);
private static final String FILE="f:/teas.xml";
//得到DOM的方法
public Document getDoc() throws ParserConfigurationException, SAXException,
IOException {
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
DocumentBuilder bui=factory.newDocumentBuilder();
Document doc=bui.parse(FILE);
return doc;
}
//儲存XML檔案的方法
private void SaveXML(Document doc)
throws TransformerFactoryConfigurationError,
TransformerConfigurationException, TransformerException {
TransformerFactory factory=TransformerFactory.newInstance();
Transformer tf=factory.newTransformer();
DOMSource source=new DOMSource(doc);
StreamResult result=new StreamResult(FILE);
tf.transform(source, result);
}
3,刪除XMl中的資訊
//刪除方法
public void deleteInfo(String id)throws Exception{
Document doc=getDoc();
doc.getDocumentElement();
NodeList list=doc.getElementsByTagName("tea");
for(int i=0;i<list.getLength();i++){
Element el=(Element)list.item(i);
String ids=el.getAttribute("id");
if(ids.equals(id)){
Element root=doc.getDocumentElement();
root.removeChild(el);
break;
}
}
SaveXML(doc);
}
3.SAX解析:Sax解析是按照xml檔案的順序來解析
SAX(Simple API for XML)是另一種常用的XML解析技術
SAX解析器不像DOM那樣建立一個完整的文件樹,而是在讀取文件時啟用一系列事件
這些事件被推給事件處理器,然後由事件處理器提供對文件內容的訪問
與DOM相比,SAX的優點如下:
記憶體消耗小
無需為所有節點建立物件
3.1 繼承org.xml.sax.helpers.DefaultHandler類建立SAX解析器
3.1.1 startDocument
3.1.2 endDocument
3.1.3 startElement
3.1.4 endElement
3.1.5 characters:處理元素內容時被呼叫
3.2 詳細的操作步驟解釋
1.取節點集合:nodeList getElementsByTagName(“name”);然後透過item()下標訪問相應的節點
2.取節點元素的屬性:elem.getAttribute(“id”)
3.取節點的文字內容:node.getTextContext();
3.建立節點:doc.createElement()
4.新增子節點: 父節點.appendChild(子節點);
5.刪除節點: 父節點.removeChild(子節點);
6.修改節點屬性: 節點.setAttribute(“name”,value);
7.修改節點文字內容: 節點.setTextContent("");
寫一個類,繼承:DefaultHandler,實現其五個方法:
//文件開始了
public void startDocument() throws SAXException {
System.out.println("文件開始了");
}
//文件結束了
public void endDocument() throws SAXException {
System.out.println("文件結束了");
}
//元素開始了
public void startElement(String uri, String localName, String
name,Attributes attributes) throws SAXException {
if(name.equals("tea")){
System.out.println("id:" + attributes.getValue("id"));
}
}
//文字開始了
public void characters(char[] ch, int start, int length)
throws SAXException {
String str=new String(ch,start,length);
if(!str.trim().equals("")){
System.out.println("name:" + str);
}
}
//元素結束了
public void endElement(String uri, String localName, String name)
throws SAXException { }
然後在test方法中
public static void main(String[] args)throws Exception {
SAXParserFactory fac=SAXParserFactory.newInstance();
SAXParser par=fac.newSAXParser();
par.parse("f:/teas.xml", new SaxTest());
}
New SaxTest是一個new出一個類的實類
注意:增刪改都需要 反轉義進去, 可以增刪改的方法裡面 就呼叫 反轉義方法。。。呼叫就更加方便!!!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69940641/viewspace-2921699/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- java EE開發之Servlet第一課:servlet的建立方式JavaServlet
- java EE開發之Servlet第二課:Servlet的三個hashMapJavaServletHashMap
- java EE開發之Servlet第八課:MVC模式 (基本理解)JavaServletMVC模式
- java EE開發之Servlet第四課:監聽器(Listener)JavaServlet
- java EE開發之Servlet第十一課:反射基礎三JavaServlet反射
- iOS開發之解析XML格式資料iOSXML
- [摘]Java EE Servlet監聽器JavaServlet
- Java EE 6之企業應用開發Java
- JavaWeb開發之建立Servlet無法自動更新web.xml配置JavaWebServletXML
- Java EE之旅06 XML基礎JavaXML
- servlet接收xml資料流[java]ServletXMLJava
- Servlet開發技術,建立,以及Servlet的配置,web.xml的配置ServletWebXML
- 【Java】解析xmlJavaXML
- Java解析XMLJavaXML
- Java之ServletJavaServlet
- Java第五課. 類&物件Java物件
- 分散式架構原理解析,Java開發必修課分散式架構Java
- java web開發--Servlet學習之HelloWorld 從部署到開發全過程JavaWebServlet
- xml解析之domXML
- JAVA進行XML解析JavaXML
- java使用sax解析xmlJavaXML
- Java EE開發常用四大框架Java框架
- python之XML解析PythonXML
- 第2,8章 servlet 開發技術(12課時)Servlet
- 使用 Java 解析XML檔案JavaXML
- Java中Dom解析xml文件JavaXML
- Java基礎 第三節 第五課Java
- 開源力量公開課第五十一期-iOS開發入門iOS
- Python XML解析之DOMPythonXML
- 後端開發:【JavaWeb開發之Servlet的兩種配置方式】後端JavaWebServlet
- J2EE開發筆記(四)—— pom.xml檔案詳解筆記XML
- 運用J2EE+XML開發網站自動生成系統XML網站
- JAVA學習課第五十八屆 — GUIJavaGUI
- XML的JAVA 解析(一)(1) (轉)XMLJava
- XML的JAVA 解析(一)(3) (轉)XMLJava
- XML的JAVA 解析(一)(2) (轉)XMLJava
- XML的JAVA 解析(一)(4) (轉)XMLJava
- XML的JAVA 解析(一)(5) (轉)XMLJava