韓順平XML學習4

xml編程

爲什麼要學習xml編程(就是對xml文件進程crud操作)

1.xml作爲數據傳遞,需要解析

2.xml作爲配置文件,需要讀取.

3.xml作爲小型數據庫.crud

 

j2ee 技術中,主要是學習 java xml 操作 ,和 js 對 xml操作

 

目前有兩種模式

dom 是 w3c 推出的標準

sax 是社區的標準

 

我們在授課中,主要講三套api

dom sax dom4j 

 

java 解析xml dom技術】 看原理:

 

 

 

我們講一個快速入門案例:

<?xml version="1.0" ?>

<班級>

<學生>

<名字>周星馳</名字>

<年齡>23</年齡>

<介紹>學習刻苦</介紹>

</學生>

<學生>

<名字>林青霞</名字>

 <年齡>32</年齡>

<介紹>是一個好學生</介紹>

</學生>

</班級>

 

代碼:

 

package two;

 

import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;

import javax.xml.transform.Transformer;

import javax.xml.transform.TransformerFactory;

import javax.xml.transform.dom.DOMSource;

import javax.xml.transform.stream.StreamResult;

 

import org.w3c.dom.Document;

import org.w3c.dom.Element;

import org.w3c.dom.Node;

import org.w3c.dom.NodeList;

 

public class Test {

 

//使用dom技術對xml文件進行crud操作

public static void main(String args[])throws Exception{

//創建一個DocumentBuilderFactory

DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();

//通過DocumentBuilderFactory,得到一個DocumentBuilder對象

DocumentBuilder dBuilder=dbf.newDocumentBuilder();

//指定解析那個xml文件

Document document=dBuilder.parse("src/two/class.xml");

//read(document);

//list(document);

//add(document);

//del(document);

upd(document);

}

//使用dom去遍歷xml文件和指定獲取某個節點

//具體地查詢某個學生的信息(顯示第一個學生的所有信息)

//請考慮如何獲取某個元素的屬性值(取出)

public static void read(Document doc){

NodeList n1=doc.getElementsByTagName("學生");

//取出第一個學生

Element stu=(Element)n1.item(0);

System.out.println("學生的性別是"+stu.getAttribute("sex"));

Element name=(Element)stu.getElementsByTagName("年齡").item(0);

System.out.println(name.getTextContent());

System.out.println("發現"+n1.getLength()+"個學生");

 

}

//遍歷該xml文件

public static void list(Node node){

if(node.getNodeType()==node.ELEMENT_NODE){

System.out.println("名字:"+node.getNodeName());

}

//System.out.println("名字:"+node.getNodeName());

//取出node的子節點

NodeList nodeList=node.getChildNodes();

for(int i=0;i<nodeList.getLength();i++){

//再去顯示

Node n=nodeList.item(i);

list(n);

}

}

//增加一個學生到xml

public static void add(Document doc)throws Exception{

//創建一個新的學生節點

Element newStu=doc.createElement("學生");

//添加一個屬性值

newStu.setAttribute("sex""");

Element newStu_name=doc.createElement("名字");

newStu_name.setTextContent("小明2");

Element newStu_age=doc.createElement("年齡");

newStu_age.setTextContent("34");

Element newStu_intro=doc.createElement("介紹");

newStu_intro.setTextContent("這是一個好孩子");

newStu.appendChild(newStu_name);

newStu.appendChild(newStu_age);

newStu.appendChild(newStu_intro);

//把新的學生節點添加到根元素

doc.getDocumentElement().appendChild(newStu);

//更新,不然添加的數據只能出現在內存中,在文件中沒有更改

//得到TransformerFactory

TransformerFactory tff=TransformerFactory.newInstance();

//通過TransformerFactory得到一個轉換器

Transformer tf=tff.newTransformer();

tf.transform(new DOMSource(doc), new StreamResult("src/two/class.xml"));

}

//刪除一個元素(:小明2,學生)

public static void del(Document doc)throws Exception{

//首先找到這個學生

//Node node=doc.getElementsByTagName("學生").item(0);

//node.getParentNode().removeChild(node);

//刪除學生的sex屬性

Element node=(Element)doc.getElementsByTagName("學生").item(0);

node.removeAttribute("sex");

//更新xml

//得到TransformerFactory

TransformerFactory tff=TransformerFactory.newInstance();

//通過TransformerFactory得到一個轉換器

Transformer tf=tff.newTransformer();

tf.transform(new DOMSource(doc), new StreamResult("src/two/class.xml"));

}

//更新操作

public static void upd(Document doc)throws Exception{

//找到

Element node=(Element)doc.getElementsByTagName("學生").item(0);

Element node_name=(Element)node.getElementsByTagName("名字").item(0);

node_name.setTextContent("宋江");

//node_name.setAttribute("sex", "");

//更新xml

//得到TransformerFactory

TransformerFactory tff=TransformerFactory.newInstance();

//通過TransformerFactory得到一個轉換器

Transformer tf=tff.newTransformer();

tf.transform(new DOMSource(doc), new StreamResult("src/two/class.xml"));

}

}



xml:

<?xml version="1.0" encoding="utf-8" standalone="no"?><班級>
<學生>
<名字>宋江</名字>
<年齡>23</年齡>
<介紹>學習刻苦</介紹>
</學生>
<學生 sex="女">
<名字>林青霞</名字>
<年齡>32</年齡>
<介紹>是一個好學生</介紹>
</學生>
<學生 sex="男"><名字>小明2</名字><年齡>34</年齡><介紹>這是一個好孩子</介紹></學生></班級>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章