第十四次總結 XML
- XML的發展經歷標記語言有哪些?
- 什麼是XML解析?
- Java中解析XML的工具?
- 如何使用DOM方式修改xml資料?
1.XML的發展經歷標記語言有哪些?
GML | 通用的標記語言,為了解決程式之間資料傳輸格式問題的 |
SGML | 標準的通用標記語言 全球資訊網聯盟 |
HTML | 超文字標記語言 |
XML: Xtensible Markup Language | 可擴充套件標記語言 |
xHTML | 可擴充套件的超文字標記語言 |
HTML5 | 可擴充套件的超文字標記語言 |
2.什麼是XML解析?
可擴充套件的標記語言
用來解決資料傳輸的格式問題
用法:
1.從xml資料中提取需要的內容
XML的解析標準
DOM Documnet Object Model文件物件模型
Sax
DOM的基本思想:
將整個XML資料轉換成一個樹形物件[Document物件]
將XML中的標籤,屬性,文字都作為一個結點物件
在解析XML的時候,先將整個xml一次性讀入到記憶體中,
封裝成樹物件
再對樹上的結點進行操作[增刪改查]
XML的資料型別:標籤 屬性 文字
整個XML文件是一個 Documnet物件
標籤是一個 Element物件
屬性是一個 Attr 物件
文字是一個 Text物件
Document Element Attr Text都是一個節點,是Node類的子類
.XML資料的標準格式
xml必須包含頭宣告
有且只有一對根標籤
標籤的開始和結束必須一樣,包括大小寫
<span>內容</span>
如果標籤中不包含子元素,就可以寫成單標籤
<span />
3.Java中解析XML的工具
JAXP:Java官方提供的XML解析工具,
支援DOM標準,也支援Sax標準
DOM方式解析XML:
Document
Attr
Element
Text
NodeList
getDocumentElement(); 獲得根節點
getChildNodes(); 獲得元素節點的所有子節點
item(index) 獲得NodeList中指定索引位置的節點
getAttribute("num") 獲得指定名字的屬性值
getNodeName() 獲得節點名稱
getTextContent() 獲得元素節點中的文字內容
getElementsByTagName("name") 根據標籤名獲得節點列表
getElementById("1234") 根據標籤的ID獲得指定的節點
怎麼通過java中的工具獲得XML資料?
XML檔案:
Demo類
package XML; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import java.io.File; public class Demo { /** * 使用JAXP工具的DOM方式解析XML * @param args */ public static void main(String args[]) throws Exception{ String path = "C:\\Users\\64138\\Desktop\\aa.xml"; File f = new File(path); //1.建立一個DOM解析器工廠 DocumentBuilderFactory factory =DocumentBuilderFactory.newInstance(); //2.通過工廠生產一個解析器物件 DocumentBuilder builder = factory.newDocumentBuilder(); //3.解析指定的XML檔案 Document dom = builder.parse(f); //從Document樹上提取資料 // Node node = dom.getFirstChild(); // System.out.println(node); //獲得文件的根節點 Element root = dom.getDocumentElement(); System.out.println("根節點:"+root); //由於是一個元素節點,可以獲得其所有的兒子節點 NodeList list = root.getChildNodes(); //遍歷list for(int i=0;i<list.getLength();i++){ //取得一個子節點 Node node = list.item(i); //如果子節點是一個元素節點,才需要處理 if(node instanceof Element) { //將node強制轉換成Element Element stu =(Element)node; //獲得stu的屬性 String num = stu.getAttribute("num"); System.out.println("num:"+num); //獲得stu的兒子節點 NodeList childList = stu.getChildNodes(); for(int j=0;j<childList.getLength();j++){ Node n = childList.item(j); if(n instanceof Element) { Element element = (Element)n; //獲得節點名字 String nodeName = element.getNodeName(); //獲得節點中包含的文字 String content = element.getTextContent(); System.out.println(nodeName+":"+content); } } } } } }
輸出結果:
4.如何使用DOM方式修改xml資料?
package XML; import org.w3c.dom.Document; import org.w3c.dom.Element; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.Result; import javax.xml.transform.Source; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import java.io.File; public class XmlDemo3 { /** * 使用JAXP工具的DOM方式解析XML * @param args */ public static void main(String args[]) throws Exception{ String path = "C:\\Users\\Administrator\\Desktop\\stus.xml"; File f = new File(path); //1.建立一個DOM解析器工廠 DocumentBuilderFactory factory =DocumentBuilderFactory.newInstance(); //2.通過工廠生產一個解析器物件 DocumentBuilder builder = factory.newDocumentBuilder(); //3.解析指定的XML檔案 Document dom = builder.parse(f); //獲得根節點 Element root = dom.getDocumentElement(); //建立一個stu標籤 Element stu= dom.createElement("stu"); //設定stu標籤的num屬性 stu.setAttribute("num", "6666"); //將stu節點作為root的子節點 root.appendChild(stu); //給stu加子節點 Element name = dom.createElement("name"); //設定name的文字 name.setTextContent("趙敏"); //將name作為stu的子節點 stu.appendChild(name); //將記憶體中的dom物件寫到xml檔案中 //建立一個寫xml的物件工廠 TransformerFactory tff = TransformerFactory.newInstance(); //通過工廠生產一個Transformer物件 Transformer tf = tff.newTransformer(); //要寫出的xml資料來源 Source xmlSource=new DOMSource(dom); //要寫到的目標檔案 Result outputTarget=new StreamResult(f ); //將指定的資料來源寫到指定位置 tf.transform(xmlSource, outputTarget); } }