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第四課:監聽器(Listener)JavaServlet
- java EE開發之Servlet第八課:MVC模式 (基本理解)JavaServletMVC模式
- java EE開發之Servlet第十一課:反射基礎三JavaServlet反射
- JavaWeb開發之建立Servlet無法自動更新web.xml配置JavaWebServletXML
- Java解析XMLJavaXML
- Java之ServletJavaServlet
- python之XML解析PythonXML
- Java第五課. 類&物件Java物件
- Python XML解析之DOMPythonXML
- 分散式架構原理解析,Java開發必修課分散式架構Java
- 使用 Java 解析XML檔案JavaXML
- 第2,8章 servlet 開發技術(12課時)Servlet
- Java匹馬行天下之J2EE框架開發——Spring—>Spring框架知多少Java框架Spring
- java基礎之XMLJavaXML
- 【spring原始碼系列】之【xml解析】Spring原始碼XML
- Java基礎 第三節 第五課Java
- J2EE開發筆記(一)—— J2EE開發環境配置筆記開發環境
- Spring | xx-servlet.xml 和 applicationContext.xml 的區別SpringServletXMLAPPContext
- Java SE, Java EE, Java MEJava
- JavaWeb開發Servlet之getParameter和getAttribute的區別,JavaWebServlet
- Xml解析XML
- java基礎學習:JavaWeb之ServletJavaWebServlet
- 甲骨文真的要開放Java EE?Java
- JAVA網路程式設計基本功之Servlet與Servlet容器Java程式設計Servlet
- Java開發學習(五十)----MyBatisPlus快速開發之程式碼生成器解析JavaMyBatis
- Flutter開發之JSON解析FlutterJSON
- ArkTS 中的 XML 解析與生成:應用開發實戰XML
- java使用jaxb解析XML(含根據xml自動生成實體類)JavaXML
- go 解析xmlGoXML
- iOS – XML解析iOSXML
- java的XML解析(DOM4J技術)JavaXML
- 第五課 以太坊開發框架Truffle從入門到實戰框架
- springmvc學習指南 之---第27篇 spring如何實現servlet3.0無web.xml 配置servlet物件的SpringMVCServletWebXML物件
- 基於jsp和servlet簡單的java web開發(idea)JSServletJavaWebIdea
- Servlet開發-day05Servlet
- java EE 8u1 SDK 包和 java EE 8 API 文件包JavaAPI