1. 程式人生 > >java Document生成和解析xml

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. 高密度編碼,資訊容量大;