亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

測試dom4j創建、修改、遍歷XML

系統 2281 0

java項目概覽:

測試dom4j創建、修改、遍歷XML

XmlManage.java

    package com.jialin;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

/**
 * 測試DOM4J創建,修改,遍歷XML
 * 
 * @author jialin
 * 
 */
public class XmlManager {
	public static void main(String[] args) {
		XmlManager xmlManager = new XmlManager();
		// 初始化xml文檔
		Document doc = null;
		// 通過dom4j方法創建xml
		// doc = xmlManager.createXml();

		// XML字符串
		// String strXMl = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
		// + "<?xml-stylesheet type=\"text/xsl\" href=\"students.xsl\"?>"
		// + "<students><!--Students Table-->   <student stu=\"001\">"
		// + "<name>張三</name><age>18</age></student><student stu=\"002\">"
		// + "<name>李四</name><age>19</age></student></students>";
		// 通過字符串創建xml
		// doc = xmlManager.createDocumentByString(strXMl);
		// XMl輸出路徑
		// String outputPath = "xml/Students.xml";
		// 輸出xml
		// xmlManager.saveDocument(doc, outputPath);

		// xml輸入路徑
		String inputPath = "xml/Students.xml";

		// 根據xml路徑更改XML
		//xmlManager.ModifyXml(inputPath);

		// 根據xml路徑獲取doc
		doc = xmlManager.getDocument(inputPath);
		// 遍歷XML
		 xmlManager.traversalDocumentByElementIterator(doc);
		// xmlManager.traversalDocumentByVisitor(doc);
		//xmlManager.traversalDocumentByElements(doc);
		//xmlManager.traversalDocumentByselectNodes(doc, "/Students/student/name");
	}

	/**
	 * 獲取XML文件
	 * @param inputPath
	 * @return
	 */
	public Document getDocument(String inputPath) {
		// 輸入文件
		File inputXml = new File(inputPath);
		SAXReader saxReader = new SAXReader();
		Document document = null;
		try {
			document = saxReader.read(inputXml);
		} catch (DocumentException e) {
			e.printStackTrace();
		}
		return document;
	}
	
	/**
	 * 通過Dom4j方法創建xml文檔
	 * 
	 * @return
	 */
	public Document createXml() {
		Document doc = DocumentHelper.createDocument();
		// 創建ProcessingInstruction
		Map<String, String> inMap = new HashMap<String, String>();
		inMap.put("type", "text/xsl");
		inMap.put("href", "students.xsl");
		doc.addProcessingInstruction("xml-stylesheet", inMap);
		// 增加根節點
		Element studentsElement = doc.addElement("Students");
		// 增加注釋
		studentsElement.addComment("Students Table");
		// 增加子節點
		Element stuElement = studentsElement.addElement("student");
		// 增加屬性
		stuElement.addAttribute("stu", "001");
		// 增加名稱節點
		Element nameElement = stuElement.addElement("name");
		// 設置名稱節點的值
		nameElement.setText("張三");
		// 增加年齡節點
		Element ageElement = stuElement.addElement("age");
		// 設置年齡節點的值
		ageElement.setText("18");

		// 同上
		Element anotherStuElement = studentsElement.addElement("student");
		anotherStuElement.addAttribute("stu", "002");
		Element anotherNameElement = anotherStuElement.addElement("name");
		anotherNameElement.setText("李四");
		Element anotherAgeElement = anotherStuElement.addElement("age");
		anotherAgeElement.setText("19");

		return doc;
	}

	/**
	 * 通過字符串創建xml文檔
	 * @param xmlStr
	 * @return
	 */
	public Document createDocumentByString(String xmlStr) {

		Document doc = null;
		try {
			// 通過字符串轉換直接構建xml文檔
			doc = DocumentHelper.parseText(xmlStr);
		} catch (DocumentException e) {
			e.printStackTrace();
		}
		return doc;
	}

	/**
	 * 修改xml
	 * 
	 * @param inputXmlPath
	 */
	public void ModifyXml(String inputXmlPath) {
		// 獲取文件
		File inputXml = new File(inputXmlPath);

		try {
			SAXReader saxReader = new SAXReader();
			// 創建document
			Document doc = saxReader.read(inputXml);
			// 讀取Students/student下所有具有屬性stu的元素
			List list = doc.selectNodes("/Students/student/@stu");
			Iterator iter = list.iterator();
			while (iter.hasNext()) {
				Attribute attribute = (Attribute) iter.next();
				if (attribute.getValue().equals("001"))
					attribute.setValue("0001");
			}

			list = doc.selectNodes("/Students/student");
			iter = list.iterator();
			while (iter.hasNext()) {
				Element element = (Element) iter.next();
				Iterator iterator = element.elementIterator("name");
				while (iterator.hasNext()) {
					Element nameElement = (Element) iterator.next();
					if (nameElement.getText().equals("張三"))
						nameElement.setText("王五");
				}
			}
			String outputPath = "xml/Students-Modified.xml";
			saveDocument(doc, outputPath);

		}

		catch (DocumentException e) {
			System.out.println(e.getMessage());
		}

	}

	/**
	 * 將文檔輸出到文件保存,可指定格式化輸出,可指定字符編碼。
	 * 
	 * @param document
	 * @param outputFile
	 */
	public void saveDocument(Document doc, String outputPath) {
		// 輸出文件
		File outputFile = new File(outputPath);
		try {
			// 美化格式
			OutputFormat format = OutputFormat.createPrettyPrint();
			// 指定XML編碼,不指定的話,默認為UTF-8
			format.setEncoding("UTF-8");
			XMLWriter output = new XMLWriter(new FileWriter(outputFile), format);
			output.write(doc);
			output.close();
		} catch (IOException e) {
			System.out.println(e.getMessage());
		}
	}

	/**
	 * 普通方法遍歷xml
	 * 
	 * @param doc
	 */
	public void traversalDocumentByElementIterator(Document doc) {
		// 獲取根節點
		Element root = doc.getRootElement();
		// 枚舉根節點下所有子節點
		for (Iterator ie = root.elementIterator(); ie.hasNext();) {
			System.out.println("======");
			Element element = (Element) ie.next();
			System.out.println(element.getName());

			// 枚舉屬性
			for (Iterator ia = element.attributeIterator(); ia.hasNext();) {
				Attribute attribute = (Attribute) ia.next();
				System.out.println(attribute.getName() + ":"
						+ attribute.getData());
			}
			// 枚舉當前節點下所有子節點
			for (Iterator ieson = element.elementIterator(); ieson.hasNext();) {
				Element elementSon = (Element) ieson.next();
				System.out.println(elementSon.getName() + ":"
						+ elementSon.getText());
			}
		}
	}

	/**
	 * 使用elements方法進行xml的讀取,相當于條件查詢,可以根據不同的節點,利用for循環查詢該節點下所有的數據。
	 * 
	 * @throws DocumentException
	 */
	public static void traversalDocumentByElements(Document doc) {
		// 獲取根節點
		Element root = doc.getRootElement();
		// 根據根節點,將根節點下 student中的所有數據放到list容器中。
		List list = root.elements("student");
		// 這種遍歷方式,是jdk1.5以上的版本支持的遍歷方式,嘿嘿試試
		for (Object obj : list) {
			Element el = (Element) obj;
			System.out.println("----------"+el.getName()+"-----------");
			// 獲取name節點下所有的內容,存入listName容器中
			List listName = el.elements("name");
			// 獲取age節點下所有的內容,存入age容器中
			List listAge = el.elements("age");
			for (int i=0;i<listName.size();i++) {
				Element elname = (Element) listName.get(i);
				// 獲取name節點下的數據。
				System.out.println(elname.getName() + ": " + elname.getText());
				Element elage = (Element) listAge.get(i);
				// 獲取age節點下的數據。
				System.out.println(elage.getName() + ": " + elage.getText());
				
			}

		}
	}

	/**
	 * 使用selectNodes讀取xml文件
	 * 
	 * @param args
	 * @throws DocumentException
	 */
	public static void traversalDocumentByselectNodes(Document doc,
			String elementpath) {
		// 使用selectNodes獲取所要查詢xml的節點。
		List list = doc.selectNodes(elementpath);

		// 遍歷節點,獲取節點內數據。
		for (Iterator ie = list.iterator(); ie.hasNext();) {
			Element el = (Element) ie.next();
			System.out.println(el.getName() + ": " + el.getText());

		}

	}

	/**
	 * 基于訪問者模式遍歷
	 * 
	 * @param doc
	 */
	public void traversalDocumentByVisitor(Document doc) {
		doc.accept(new MyVisitor());
	}

}

  


MyVisitor.java

    package com.jialin;

import org.dom4j.Attribute;
import org.dom4j.Element;
import org.dom4j.ProcessingInstruction;
import org.dom4j.VisitorSupport;

/**
 * 定義自己的訪問者類
 */
public class MyVisitor extends VisitorSupport {
   /**
    * 對于屬性節點,打印屬性的名字和值
    */
   public void visit(Attribute node) {
       System.out.println("attribute : " + node.getName() + " = "
              + node.getValue());
   }

   /**
    * 對于處理指令節點,打印處理指令目標和數據
    */
   public void visit(ProcessingInstruction node) {
       System.out.println("PI : " + node.getTarget() + " "
              + node.getText());
   }

   /**
    * 對于元素節點
    * 如果包含文本內容,則打印元素的名字和元素的內容。如果不是,則只打印元素的名字
    */
   public void visit(Element node) {
       if (node.isTextOnly())
          System.out.println("element : " + node.getName() + " = "
                 + node.getText());
       else
          System.out.println("《《《《《《" + node.getName() + "》》》》》》");
   }
}


  


測試dom4j創建、修改、遍歷XML


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 欧美日韩理论 | 91欧美在线视频 | 色婷婷视频在线 | 国产日韩精品欧美在线ccc | 久草国产视频 | 中文字幕不卡在线播放 | 欧美激情在线播放一区二区 | 精品国产三级 | 欧美一级毛片特黄大 | 国产美女久久久久久久久久久 | 日本三级带日本三级带黄首页 | 亚洲欧美日韩另类 | 亚洲国产精品视频在线观看 | 国产成人久久久精品毛片 | 国产精品手机网站 | 久久国产一片免费观看 | 手机看片国产福利 | 国产成人高清视频免费播放 | 欧美一区二区三区黄色 | 国产精品国偷自产在线 | 亚洲精品专区一区二区三区 | 日本精品视频在线观看 | 国产欧美日韩精品综合 | 尹人视频在线观看 | 成人午夜天 | 一区二区三区免费在线视频 | 全部免费毛片在线 | 久久成人国产精品 | 久久美剧 | 一级a俄罗斯毛片免费 | 伊人亚洲综合网 | 97国产在线播放 | 国产精品伦视频观看免费 | 99九九精品 | 波多野结衣中文一区二区免费 | se色成人亚洲综合 | 国产精品模特hd在线 | 天天综合网天天做天天受 | 国产男女爱视频在线观看 | 一区二区三区四区 | 狠狠久久综合 |