日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

【Java规划】DOM XML Parser分解、遍历、创XML

發(fā)布時(shí)間:2025/4/16 asp.net 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Java规划】DOM XML Parser分解、遍历、创XML 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1、前言

DOM XML Parser簡(jiǎn)介

DOM 它是 W3C 處理 XML 規(guī)范 API,這是很多其他的 XML 地基處理相關(guān)標(biāo)準(zhǔn),不僅是 Java,其他的,如 Javascript,PHP。MS .NET 等方面都達(dá)到了標(biāo)準(zhǔn)語(yǔ)言。用最為廣泛的 XML 處理方式。當(dāng)然,為了能提供很多其他更加強(qiáng)大的功能,Java 對(duì)于 DOM 直接擴(kuò)展工具類有非常多,比方非常多 Java 程序猿耳熟能詳?shù)?JDOM。DOM4J 等等,它們基本上屬于對(duì) DOM 接口功能的擴(kuò)充,保留了非常多 DOM API 的特性。很多原本的 DOM 程序猿甚至都沒(méi)有不論什么障礙就熟練掌握了另外兩者的使用,直觀、易于操作的方式使它深受廣大 Java 程序猿的喜愛(ài)。

DOM XML Parser優(yōu)缺點(diǎn)

實(shí)現(xiàn) W3C 標(biāo)準(zhǔn),有多種編程語(yǔ)言支持這樣的解析方式,而且這樣的方法本身操作上簡(jiǎn)單快捷,十分易于剛開(kāi)始學(xué)習(xí)的人掌握。其處理方式是將 XML 整個(gè)作為類似樹(shù)結(jié)構(gòu)的方式讀入內(nèi)存中以便操作及解析,因此支持應(yīng)用程序?qū)?XML 數(shù)據(jù)的內(nèi)容和結(jié)構(gòu)進(jìn)行改動(dòng),可是同一時(shí)候因?yàn)槠漤氁谔幚黹_(kāi)始時(shí)將整個(gè) XML 文件讀入到內(nèi)存中去進(jìn)行分析,因此其在解析大數(shù)據(jù)量的 XML 文件時(shí)會(huì)遇到類似于內(nèi)存泄露以及程序崩潰的風(fēng)險(xiǎn),請(qǐng)對(duì)這點(diǎn)多加注意。

適用范圍:小型 XML 文件解析、須要全解析或者大部分解析 XML、須要改動(dòng) XML 樹(shù)內(nèi)容以生成自己的對(duì)象模型

2、XML DOM節(jié)點(diǎn)樹(shù)

XML DOM將XML文檔作為樹(shù)結(jié)構(gòu),樹(shù)結(jié)構(gòu)稱為一個(gè)節(jié)點(diǎn)樹(shù)。全部的節(jié)點(diǎn)能夠通過(guò)樹(shù)訪問(wèn),它們的內(nèi)容能夠被改動(dòng)或刪除,也能夠建立新的元素。節(jié)點(diǎn)樹(shù)用于顯示節(jié)點(diǎn)集和它們之間的聯(lián)系。

下圖呈現(xiàn)的是books.XML文件的節(jié)點(diǎn)樹(shù)。

經(jīng)常使用的幾個(gè)對(duì)象:

1)Element類:

是Node類最基本的子對(duì)象。被廣泛使用,在元素中能夠包括屬性。因而Element中有存取其屬性的方法。

2)Node類:

Node對(duì)象是DOM中最主要的對(duì)象,代表了文檔樹(shù)中的抽象節(jié)點(diǎn)。但在實(shí)際使用中非常少會(huì)直接使用Node對(duì)象。而是使用Node對(duì)象的子對(duì)象Element,Attr,Text等。

3)NodeList類:

代表了一個(gè)包括一個(gè)或者多個(gè)Node的列表,依據(jù)操作能夠?qū)⑵浜?jiǎn)化的看做為數(shù)組。

3、DOM XML Parser 解析XML文件

以下給出一段用于解析的?books.xml片段:

<?xml version="1.0" encoding="UTF-8"?> <!-- Edited by XMLSpy --> <bookstore><book category="cooking"><title lang="en">Everyday Italian</title><author>Giada De Laurentiis</author><year>2005</year><price>30.00</price></book><book category="children"><title lang="en">Harry Potter</title><author>J K. Rowling</author><year>2005</year><price>29.99</price></book><book category="web"><title lang="en">XQuery Kick Start</title><author>James McGovern</author><author>Per Bothner</author><author>Kurt Cagle</author><author>James Linn</author><author>Vaidyanathan Nagarajan</author><year>2003</year><price>49.99</price></book><book category="web" cover="paperback"><title lang="en">Learning XML</title><author>Erik T. Ray</author><year>2003</year><price>39.95</price></book> </bookstore>

Book.java:該對(duì)象是一個(gè)實(shí)體Bean,其字段信息相應(yīng)著xml文件中的元素字段,因?yàn)槠邢?#xff0c;讀者自行生成get、set方法 。

package com.andieguo.xmldemo;public class Book {private String category;private String titleLang;private String title;private String author;private Integer year;private Double price;@Overridepublic String toString() {return "Book [category=" + category + ", titleLang=" + titleLang + ", title=" + title + ", author=" + author + ", year=" + year + ", price=" + price + "]";}//生成字段的get、set方法 }ReadXMLFile.java :解析XML文件并存入List<Book>集合。

package com.andieguo.xmldemo;import java.io.File; import java.util.ArrayList; import java.util.List;import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory;import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList;public class ReadXMLFile {public static void main(String[] args) {File file = new File("src/com/andieguo/xmldemo/books.xml");//books.xml文件應(yīng)放在和ReadXMLFile.java同級(jí)的目錄下List<Book> books = readXMLFile(file);for (Book book : books) {System.out.println(book.toString());}}public static List<Book> readXMLFile(File file) {List<Book> lists = new ArrayList<Book>();try {DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();Document doc = dBuilder.parse(file);NodeList bookList = doc.getElementsByTagName("book");for (int i = 0; i < bookList.getLength(); i++) {Node bookNode = bookList.item(i);if (bookNode.getNodeType() == Node.ELEMENT_NODE) {Element bookElement = (Element) bookNode;Book book = new Book();book.setCategory(bookElement.getAttribute("category"));Element titleElement = (Element) bookElement.getElementsByTagName("title").item(0);book.setTitle(titleElement.getTextContent());book.setTitleLang(titleElement.getAttribute("lang"));NodeList authorList = bookElement.getElementsByTagName("author");String author = "";for (int j = 0; j < authorList.getLength(); j++) {author = author + authorList.item(j).getTextContent() + "/";}author = author.substring(0, author.length() - 1);book.setAuthor(author);book.setYear(Integer.valueOf(bookElement.getElementsByTagName("year").item(0).getTextContent()));book.setPrice(Double.valueOf(bookElement.getElementsByTagName("price").item(0).getTextContent()));lists.add(book);}}} catch (Exception e) {e.printStackTrace();}return lists;} }

執(zhí)行程序后的效果圖:


4、DOM XML Parser 遍歷XML文件

LoopXMLFile.java:通過(guò)迭代遍歷xml文件 package com.andieguo.xmldemo;import java.io.File;import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory;import org.w3c.dom.Document; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList;public class LoopXMLFile {public static void main(String[] args) {loopXMLFile();}private static void loopXMLFile(){try {File file = new File("src/com/andieguo/xmldemo/books.xml");DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();Document doc = dBuilder.parse(file);if(doc.hasChildNodes()){printNote(doc.getChildNodes());}} catch (Exception e) {e.printStackTrace();}}private static void printNote(NodeList nodeList){for(int i=0; i<nodeList.getLength();i++){Node node = nodeList.item(i);if(node.getNodeType() == Node.ELEMENT_NODE){System.out.println("<"+node.getNodeName()+">");System.out.println(node.getTextContent());if(node.hasAttributes()){NamedNodeMap nodeMap = node.getAttributes();for(int j=0;j<nodeMap.getLength();j++){Node nd = nodeMap.item(j);System.out.println(nd.getNodeName()+"="+nd.getNodeValue());}}if(node.hasChildNodes()){printNote(node.getChildNodes());}System.out.println("<" + node.getNodeName() + "/>");}}} }

5、DOM XML Parser 創(chuàng)建XML文件

CreateXMLFile.java:

將集合List<Book>中的數(shù)據(jù)填充構(gòu)建的XML文件里,讀者可結(jié)合第2節(jié) XML DOM樹(shù)圖來(lái)理解整個(gè)XML文件節(jié)點(diǎn)的生成、加入構(gòu)建過(guò)程。

特別注意:

對(duì)于XML文件里的元素<year>2500</year>而言。2500不是<year>元素的值,而是<year>元素的一個(gè)TextNode節(jié)點(diǎn)。所以才有year.appendChild(doc.createTextNode(books.get(i).getYear().toString()));這種語(yǔ)句存在。

package com.andieguo.xmldemo;import java.io.File; import java.util.List;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;public class CreateXMLFile {public static void main(String[] args) {File file = new File("src/com/andieguo/xmldemo/books.xml");//books.xml文件應(yīng)放在和CreateXMLFile.java同級(jí)的目錄下List<Book> books = ReadXMLFile.readXMLFile(file);createXMLFile(books);}public static void createXMLFile(List<Book> books) {Document doc;Element bookstore;Element book;Element title;Element author;Element year;Element price;try {// 得到DOM解析器的工廠實(shí)例DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();// 從DOM工廠中獲得DOM解析器DocumentBuilder dbBuilder = dbFactory.newDocumentBuilder();// 創(chuàng)建文檔樹(shù)模型對(duì)象doc = dbBuilder.newDocument();if (doc != null) {bookstore = doc.createElement("bookstore");for (int i = 0; i < books.size(); i++) {book = doc.createElement("book");//設(shè)置元素book的屬性值book.setAttribute("category", books.get(i).getCategory());//創(chuàng)建名稱為title的元素title = doc.createElement("title");//創(chuàng)建文本節(jié)點(diǎn)并作為子節(jié)點(diǎn)加入到title元素中title.appendChild(doc.createTextNode(books.get(i).getTitle()));//設(shè)置元素title的屬性值title.setAttribute("lang", books.get(i).getTitleLang());//將title子元素加入到book中book.appendChild(title);String[] strAuthor = books.get(i).getAuthor().split("/");for(int j=0;j<strAuthor.length;j++){author = doc.createElement("author");author.appendChild(doc.createTextNode(strAuthor[j]));book.appendChild(author);//將多個(gè)author子元素加入到book中}year = doc.createElement("year");year.appendChild(doc.createTextNode(books.get(i).getYear().toString()));book.appendChild(year);//將year子元素加入到book中price = doc.createElement("price");price.appendChild(doc.createTextNode(books.get(i).getPrice().toString()));book.appendChild(price);//將price子元素加入到book中bookstore.appendChild(book); //將book作為子元素加入到樹(shù)的根節(jié)點(diǎn)bookstore}doc.appendChild(bookstore);//加入到文檔樹(shù)中TransformerFactory transformerFactory = TransformerFactory.newInstance();Transformer transformer = transformerFactory.newTransformer();DOMSource source = new DOMSource(doc);StreamResult result = new StreamResult(new File("src/com/andieguo/xmldemo/createbooks.xml"));transformer.transform(source, result);}} catch (Exception e) {e.printStackTrace();}} }

執(zhí)行程序后的效果圖:


?參考:

Java 處理 XML 的三種主流技術(shù)及介紹

http://www.ibm.com/developerworks/cn/xml/dm-1208gub/

XML DOM Node Tree

http://www.w3schools.com/dom/dom_nodetree.asp

How To Read XML File In Java – (DOM Parser)

http://www.mkyong.com/java/how-to-read-xml-file-in-java-dom-parser/

How To Create XML File In Java – (DOMParser)

http://www.mkyong.com/java/how-to-create-xml-file-in-java-dom/

org.w3c.dom(java dom)解析XML文檔

http://www.cnblogs.com/shenliang123/archive/2012/05/11/2495252.html

友情提示:

轉(zhuǎn)載請(qǐng)注明出處http://blog.csdn.net/andie_guo/article/details/24844351?。謝略。

版權(quán)聲明:本文博主原創(chuàng)文章。博客,未經(jīng)同意不得轉(zhuǎn)載。

總結(jié)

以上是生活随笔為你收集整理的【Java规划】DOM XML Parser分解、遍历、创XML的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。