java Document生成和解析xml
Document
場景:需要知道文件所有結構
需要把文件一些元素排序
文件中的資訊被多次使用的情況
優勢:由於Document是java中自帶的解析器,相容性強
缺點:由於Document是一次性載入文件資訊,如果文件太大,不太適用
Document操作步驟
第一步:初始化xml解析工廠
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
第二步:建立DocumentBuilder
DocumentBuilder builder = factory.newDocumentBuilder();
第三步:建立Document
Document doc = builder.newDocument();
standalone用來表示該檔案是否呼叫其它外部的檔案。若值是 ”yes” 表示沒有呼叫外部檔案
doc.setXmlStandalone(true);
第四步:建立節點
Element element = doc.createElement("root");
element.setAttribute("attr", "root");//設定節點屬性
childTwoTwo.setTextContent("root attr");//設定標籤之間的內容
第五步:把節點新增到Document
doc.appendChild(element);
第六步:把xml內容輸出到具體的檔案中,見下面程式碼
Document生成xml
package com.xm.xml.document; import java.io.File; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; 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; /** * java document生成xml * @author ouyangjun */ public class CreateDocument { public static void main(String[] args) { // 呼叫xml生成方法 createDocument(new File("E:\\person.xml")); } public static void createDocument(File file){ try { // 初始化xml解析工廠 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); // 建立DocumentBuilder DocumentBuilder builder = factory.newDocumentBuilder(); // 建立Document Document doc = builder.newDocument(); // standalone用來表示該檔案是否呼叫其它外部的檔案。若值是 ”yes” 表示沒有呼叫外部檔案 doc.setXmlStandalone(true); // 建立一個根節點 // 說明: doc.createElement("元素名")、element.setAttribute("屬性名","屬性值")、element.setTextContent("標籤間內容") Element element = doc.createElement("root"); element.setAttribute("attr", "root"); // 建立根節點第一個子節點 Element elementChildOne = doc.createElement("person"); elementChildOne.setAttribute("attr", "personOne"); element.appendChild(elementChildOne); // 第一個子節點的第一個子節點 Element childOneOne = doc.createElement("people"); childOneOne.setAttribute("attr", "peopleOne"); childOneOne.setTextContent("attr peopleOne"); elementChildOne.appendChild(childOneOne); // 第一個子節點的第二個子節點 Element childOneTwo = doc.createElement("people"); childOneTwo.setAttribute("attr", "peopleTwo"); childOneTwo.setTextContent("attr peopleTwo"); elementChildOne.appendChild(childOneTwo); // 建立根節點第二個子節點 Element elementChildTwo = doc.createElement("person"); elementChildTwo.setAttribute("attr", "personTwo"); element.appendChild(elementChildTwo); // 第二個子節點的第一個子節點 Element childTwoOne = doc.createElement("people"); childTwoOne.setAttribute("attr", "peopleOne"); childTwoOne.setTextContent("attr peopleOne"); elementChildTwo.appendChild(childTwoOne); // 第二個子節點的第二個子節點 Element childTwoTwo = doc.createElement("people"); childTwoTwo.setAttribute("attr", "peopleTwo"); childTwoTwo.setTextContent("attr peopleTwo"); elementChildTwo.appendChild(childTwoTwo); // 新增根節點 doc.appendChild(element); // 把xml內容輸出到具體的檔案中 TransformerFactory formerFactory=TransformerFactory.newInstance(); Transformer transformer=formerFactory.newTransformer(); // 換行 transformer.setOutputProperty(OutputKeys.INDENT, "YES"); // 文件字元編碼 transformer.setOutputProperty(OutputKeys.ENCODING, "utf-8"); // 可隨意指定檔案的字尾,效果一樣,但xml比較好解析,比如: E:\\person.txt等 transformer.transform(new DOMSource(doc),new StreamResult(file)); System.out.println("xml CreateDocument success!"); } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (TransformerConfigurationException e) { e.printStackTrace(); } catch (TransformerException e) { e.printStackTrace(); } } }
xml效果圖:
Document解析xml
package com.xm.xml.document;
import java.io.File;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
/**
* java Document解析xml
* @author ouyangjun
*/
public class ParseDocument {
public static void main(String[] args){
File file = new File("E:\\person.xml");
if(!file.exists()){
System.out.println("xml檔案不存在,請確認!");
} else {
parseDocument(file);
}
}
public static void parseDocument(File file){
try{
// 初始化xml解析工廠
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// 建立DocumentBuilder
DocumentBuilder builder = factory.newDocumentBuilder();
// 建立解析xml的Document
Document doc = builder.parse(file);
// 根節點名稱
String rootName = doc.getDocumentElement().getTagName();
System.out.println("根節點: " + rootName);
System.out.println("遞迴解析--------------begin------------------");
// 遞迴解析Element
Element element = doc.getDocumentElement();
parseElement(element);
System.out.println("遞迴解析--------------end------------------");
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void parseElement(Element element){
System.out.print("<" + element.getTagName());
NamedNodeMap attris = element.getAttributes();
for(int i = 0; i < attris.getLength(); i++) {
Attr attr = (Attr) attris.item(i);
System.out.print(" " + attr.getName() + "=\"" + attr.getValue() + "\"");
}
System.out.println(">");
NodeList nodeList = element.getChildNodes();
Node childNode;
for (int temp = 0; temp < nodeList.getLength(); temp++) {
childNode = nodeList.item(temp);
// 判斷是否屬於節點
if (childNode.getNodeType() == Node.ELEMENT_NODE) {
// 判斷是否還有子節點
if(childNode.hasChildNodes()){
parseElement((Element) childNode);
} else if (childNode.getNodeType() != Node.COMMENT_NODE) {
System.out.print(childNode.getTextContent());
}
}
}
System.out.println("</" + element.getTagName() + ">");
}
}
控制檯列印效果圖:
本章完結,待續!
本文說明:該文章屬於原創,如需轉載,請標明文章轉載來源
相關推薦
java Document生成和解析xml
Document 場景:需要知道文件所有結構 需要把文件一些元素排序 文件中的資訊被多次使用的情況 優勢:由於Document是java中自帶的解析器,相容性強 缺點:由於Document是一次性載入文件資訊,如果文件太大,不太
JAVA DOM生成和解析XML例項
XML現在已經成為一種通用的資料交換格式,平臺的無關性使得很多場合都需要用到XML。java操作XML時候有4中經典方法,本文將介紹DOM操作XML。並給出一個用DOM生成和解析XML的例項。 初始步驟如下: 1.建立解析工廠: DocumentBuilderFac
java 生成和解析xml
img use public set odin 實現 etag system Coding 本文主要使用的是Jdom.jar包(包的下載百度一下)實現了生成xml文件和解析xml文件 下面是生成xml的實現 說明:stuLists集合是一個存放著Student對象的集合
java 利用Xstream註解生成和解析xml
1.Xstream簡介; 使用限制: JDK版本不能<1.5. 雖然預處理註解是安全的,但自動偵查註解可能發生競爭條件. 特點: 簡化的API; 無對映檔案; 高效能,低記憶體佔用; 整潔的XML; 不需要修改物件;支援內部私
C++使用TinyXML生成和解析xml檔案
TinyXML is a simple, small, C++ XML parser that can be easily integrated into other programs. 官網下載原始碼 下載後把tinystr.h、tinystr.cpp、tinyxml.h、tinyxm
Java之Pull方式生成xml檔案和解析xml檔案
Pull XML解析器早已經被google整合到android sdk當中,它是google官方推薦的解析器。 如果我們要在Java桌面、J2ME等當中使用Pull方式生成xml檔案和解析xml檔案,需要用到kxml2; KXML解析器是基於普通XML PULL解析器的
java生成和解析二維碼
ade ted image def eat tro per buffer could 前言 現在,二維碼的應用已經非常廣泛,在線生成器也是諸多,隨手生成。 所以就和大家分享一個小案例,用zxing來做一個的二維碼生成器,當然這個例子是比較簡單,若是寫的不好請多多包涵。
Java實現的二維碼生成和解析(QRCode方式)
1.背景 在Java實現的二維碼生成和解析(zxing方式)中採用的是谷歌裡的二維碼生成方式,在這裡將另外的一種二維碼生成方式記錄下來,以方便自己和其他需要的人。 2.二維碼 第一步:匯入相應的jar包。在http://downloa
Java實現的二維碼生成和解析(zxing方式)
一、匯入包。 在Maven中pom.xml中加入。 <dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId
java組裝xml和解析xml(jdom使用)
場景:將一張表一條記錄資料組裝成標準XML,將標準XML解析放入HashMap中 1.組裝XML /** 組裝XML */ public static String formatDataToXml(Map mapdData) { StringBuffer xml = ne
【Java】使用Apache POI生成和解析Excel檔案
概述 Excel是我們平時工作中比較常用的用於儲存二維表資料的,JAVA也可以直接對Excel進行操作,分別有jxl和poi,2種方式。 程式碼 要使用poi,必須引入poi的jar包,maven依賴如下(最新包可參考mvn資訊): <
java實現二維碼的生成和解析。
二維碼的特點: 1. 高密度編碼,資訊容量大 可容納多達1850個大寫字母或2710個數字或1108個位元組,或500多個漢字,比普通條碼資訊容量約高几十倍。 2. 編碼範圍廣 該條碼可以把圖片、聲音、文字、簽字、指紋等可以數字化的資訊進行編碼,用條碼錶示出來
Java二維碼生成和解析
二維碼生成: 引用的包: <dependency> <groupId>com.google.zxing</groupId>
使用JSONObject生成和解析json
-i 引入 detail .so map對象 com cti name ber 使用JSONObject生成和解析json 1. json數據類型 類型描述 Number 數字型 String 字符串型 Boolean 布爾型 Array 數組
生成和解析txt文件
stat zha 上海 查找內容 list lose list() checked types package txt; import java.io.BufferedReader; import java.io.File; import java.io.File
Python:minidom模塊(DOM寫入和解析XML)
ice 美化 odin xml文件 高級 獲取 node 錯誤信息 tel 一、DOM寫XML文件 #導入minidom from xml.dom import minidom # 1.創建DOM樹對象 dom=minidom.Document() # 2.創建根節點。每
post方式發送和解析xml
httpclient post xml public void etcauthorize(String authCode, String clientState) { logger.info("CMCasController- etcauthorize start... "); V
用zxing生成和解析二維碼
ont 跳轉 char log trac -s ioe hints pan package test; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOExceptio
在java中使用dom4j解析xml
() while 9.png eval ted eva har main root 創建xml文檔並輸出到文件 import java.io.File; import java.io.FileOutputStream; import org.dom4j.Documen
使用zxing生成和解析二維碼
關於二維碼 一. 二維碼的分類 線性堆疊式二維碼、矩陣式二維碼、郵政碼。 二. 二維碼的優缺點 優點:1. 高密度編碼,資訊容量大;