Java針對XML檔案的操作大集合

XML是工作上常用到的資料交換格式,會需要利用JAVA進行XML資料的新增、修改或刪除,這裡把相關的方法記錄下來。

下述範例會存取在C:\Projects\Javas\中的sample.xml檔,而檔案中已經有以下的內容:

<?xml version="1.0" encoding="utf-8"?>

<root> 
  <item> 
    <productID>10001</productID>  
    <productName>產品名稱1</productName>  
    <productPrice>10</productPrice> 
  </item>
  <item> 
    <productID>10002</productID>  
    <productName>產品名稱2</productName>  
    <productPrice>20</productPrice> 
  </item>  
  <item> 
    <productID>10003</productID>  
    <productName>產品名稱3</productName>  
    <productPrice>30</productPrice> 
  </item>
</root>

利用Java存取XML我選用的Library是dom4j,可參考官網的介紹,以下是JAVA存取的程式範例:

package CDIT.stanley;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Iterator;

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


public class dom4jXMLFullSample {
	
	//新增XML Node內容
	public static String XMLAppendNode(String xmlFilePath, String productID, String productName, String productPrice){
		
		String appendStatus = "0";
		
		try {
			
			SAXReader reader = new SAXReader();
			Document document = reader.read(xmlFilePath);
			Element root = document.getRootElement();
			Element item = root.addElement("item");
			
			item.addElement("productID").setText(productID);
			item.addElement("productName").setText(productName);
			item.addElement("productPrice").setText(productPrice);
			
			OutputFormat format = OutputFormat.createPrettyPrint();
		    format.setEncoding("utf-8");
		    XMLWriter writer = new XMLWriter(new FileOutputStream(xmlFilePath),format);
		    writer.write(document);
		    writer.close();
		    appendStatus = "1";
			
		} catch (DocumentException e) {
			return appendStatus;
		} catch (UnsupportedEncodingException e) {
			return appendStatus;
		} catch (FileNotFoundException e) {
			return appendStatus;
		} catch (IOException e) {
			return appendStatus;
		}
		return appendStatus;
			
	}
	
	//修改XML Node內容
	public static String XMLChangeNodeValue(String xmlFilePath, String productID, String productName, String productPrice){
		
		String updateStatus = "0";
		
		try {
			SAXReader reader = new SAXReader();
			Document document = reader.read(xmlFilePath);
			Element root = document.getRootElement();
			@SuppressWarnings("rawtypes")
			Iterator it = root.elementIterator();
	        
			while (it.hasNext()) {
	            Element element = (Element) it.next();	            
	            if(productID.equals(element.elementText("productID"))){	            	
	    		    try {
	    		    	
		            	element.element("productName").setText(productName);
		            	element.element("productPrice").setText(productPrice);
		            	
		            	OutputFormat format = OutputFormat.createPrettyPrint();
		    		    format.setEncoding("utf-8");
		    		    XMLWriter writer = new XMLWriter(new FileOutputStream(xmlFilePath),format);
						writer.write(document);
						writer.close();
						updateStatus = "1";
					} catch (IOException e) {
						return updateStatus;
					}	    		   
				}
	        }
			return updateStatus;
		} catch (DocumentException e) {
			return updateStatus;
		}

	}
	
	//刪除XML Node
	public static String XMLRemoveNode(String xmlFilePath , String productID){
		String removeStatus = "0";
		
		try {
			SAXReader reader = new SAXReader();
			Document document = reader.read(xmlFilePath);
			Element root = document.getRootElement();
			@SuppressWarnings("rawtypes")
			Iterator it = root.elementIterator();
	        
			while (it.hasNext()) {
	            Element element = (Element) it.next();
	            if(productID.equals(element.elementText("productID"))){  	
	    		    try {
		            	element.element("item");
		            	element.detach();
		            	
		            	OutputFormat format = OutputFormat.createPrettyPrint();
		    		    format.setEncoding("utf-8");
		    		    XMLWriter writer = new XMLWriter(new FileOutputStream(xmlFilePath),format);
						writer.write(document);
						writer.close();
						removeStatus = "1";
					} catch (IOException e) {
						return removeStatus;
					}
				}	            
	        }
			return removeStatus;
		} catch (DocumentException e) {
			return removeStatus;
		}

	}
	
	public static void main (String[] args){
		String xmlFilePath = "C:\\Projects\\Javas\\sample.xml";
		//新增
		XMLAppendNode(xmlFilePath , "10004", "產品名稱4", "40");
		//修改
		XMLChangeNodeValue (xmlFilePath , "10001", "測試修改", "100");
		//刪除
		XMLRemoveNode (xmlFilePath , "10002");
	}
}

上述程式進行完後,會將原本的XML檔變成如下的內容:

<?xml version="1.0" encoding="utf-8"?>

<root> 
  <item> 
    <productID>10001</productID>  
    <productName>測試修改</productName>  
    <productPrice>100</productPrice> 
  </item>  
  <item> 
    <productID>10003</productID>  
    <productName>產品名稱3</productName>  
    <productPrice>30</productPrice> 
  </item>  
  <item> 
    <productID>10004</productID>  
    <productName>產品名稱4</productName>  
    <productPrice>40</productPrice> 
  </item> 
</root>

You may also like...

7,842 Responses

  1. GichardPheve表示:

    Its like you read my mind! You appear to know a lot about this, like you wrote the book in it or something. I think that you can do with some pics to drive the message home a bit, but other than that, this is great blog. A fantastic read. I will certainly be back.

    http://forum.anime.org.ua/bbs/showthread.php?t=31518

  2. Xazruye表示:

    Здравствуйте!
    Купить документ о получении высшего образования
    landik-diploms-srednee.ru/attestat-shkoly

  3. Matthewchact表示:

    Cytotec 200mcg price: buy cytotec online fast delivery – buy cytotec

  4. depending on fossil fuel is always a bad idea, we should always concentrate on renewable energy..

  5. Trefuhz表示:

    Добрый день!
    Как избежать рисков при покупке диплома колледжа или ПТУ в России
    mans-diplomyxx.ru/diplom-tehnikuma
    Рады оказать помощь!.

  6. i love the Bazooka of Megatron, i don’t understand why they did not include it on the movie“

  7. Carlospoday表示:

    tamoxifen and osteoporosis: effexor and tamoxifen – nolvadex for pct

  8. Greetings! Very useful advice in this particular article! It’s the little changes which will make the largest changes. Many thanks for sharing!

  9. Very efficiently written post. It will be valuable to anyone who utilizes it, including myself. Keep up the good work – can’t wait to read more posts.

  10. LewisTwera表示:

    http://zithromaxbestprice.pro/# buy cheap zithromax online

  11. DavidGrorn表示:

    Complaints have flooded social media since the video’s release, with residents saying it fails to show the modern side of their country. Many claim the footage was edited to seemingly appear old-fashioned, with a faded sepia tone, and that the camera focuses on shabby architecture.
    жесткий анальный секс
    Others have complained about the video’s airport scenes, during which one of the characters loses his luggage and seeks help from a local ground staff member called “Happy.”

    “When I watched it, I was thinking, this was Thailand 50 years ago. This looked like Thailand 70 years ago. There were no segments showing the modernity of my home,” David William, an American content creator based in Thailand, said in Thai in a TikTok video that has been viewed over 11 million times.

    In an interview with CNN, he said he’s never seen “a cab that looked that bad before” in his nearly 10 years in the country, adding Thailand’s main gateway, Suvarnabhumi Airport is just as modern as New York’s John F. Kennedy International Airport.

    “Thailand is a modern, safe and beautiful country,” he said. “I just hope don’t misunderstand.”

    Echoing his view, Facebook user Nipawan Labbunruang said the video makes Thailand look “terrible.”

    “What is this clip trying to present?” she wrote in a post that received 1,900 likes.

  12. 10 Factors To Know On Glass Window Replacement
    You Didn’t Learn In School window glass replacement

  13. Lazrdvl表示:

    Здравствуйте!
    Мы изготавливаем дипломы любой профессии по невысоким тарифам.
    diplomrushkan.ru/attestat-9-klassov

  14. emergency表示:

    Ford Ka Key Tips From The Best In The Business emergency

  15. JesusHip表示:

    Complaints have flooded social media since the video’s release, with residents saying it fails to show the modern side of their country. Many claim the footage was edited to seemingly appear old-fashioned, with a faded sepia tone, and that the camera focuses on shabby architecture.
    жесткое русское порно
    Others have complained about the video’s airport scenes, during which one of the characters loses his luggage and seeks help from a local ground staff member called “Happy.”

    “When I watched it, I was thinking, this was Thailand 50 years ago. This looked like Thailand 70 years ago. There were no segments showing the modernity of my home,” David William, an American content creator based in Thailand, said in Thai in a TikTok video that has been viewed over 11 million times.

    In an interview with CNN, he said he’s never seen “a cab that looked that bad before” in his nearly 10 years in the country, adding Thailand’s main gateway, Suvarnabhumi Airport is just as modern as New York’s John F. Kennedy International Airport.

    “Thailand is a modern, safe and beautiful country,” he said. “I just hope don’t misunderstand.”

    Echoing his view, Facebook user Nipawan Labbunruang said the video makes Thailand look “terrible.”

    “What is this clip trying to present?” she wrote in a post that received 1,900 likes.

  16. Matthewchact表示:

    buying cheap propecia prices: cost of generic propecia without dr prescription – generic propecia online

  17. I’m curious to find out what blog platform you are utilizing? I’m having some small security issues with my latest website and I’d like to find something more secure. Do you have any suggestions?

  18. Lazrzim表示:

    Здравствуйте!
    Мы предлагаем дипломы любой профессии по выгодным ценам.
    rushkas-diploms.ru/kupit-diplom-medsestry

  19. You’ll Never Guess This Class 3 Mobility Scooter For
    Sale’s Secrets Class 3 mobility scooter for sale

  20. fantastic points altogether, you just gained a new reader. What would you suggest in regards to your post that you made some days ago? Any positive?

  21. Sazriqe表示:

    Добрый день!
    Диплом специалиста
    kherson.forum2x2.ru/t10930-topic#26349

  22. Mazrbcd表示:

    Добрый день!
    Как официально купить аттестат 11 класса с упрощенным обучением в Москве
    rushkadiplomik.ru

  23. Diplomi_jdEa表示:

    Привет, друзья!
    Купить документ ВУЗа можно в нашей компании в Москве.
    diplomyx-rushka.ru

  24. Craigsniva表示:

    Магазин Экипировка Эксперт
    Капюшон К8
    Боец, Экипировка Эксперт — это розничный магазин, сотрудничающий с рядом оптовых складов и производителей. Это значит, что при должном количестве товара мы дадим очень хорошие цены.

    Название взяли независимо от того, что наша страна сейчас проводит Специальную Военную Операцию, хорошая снаряга и экипировка нужна всегда. Готовишься в бой, мобилизован, привык активно проводить время или решил подготовить тревожный чемоданчик, мы поможем тебе. Наши клиенты: фонды, медики, такие же как ты бойцы СВО и обычные неравнодушные граждане.

    Самое главное, что нужно о нас знать, мы детально объясняем, что и как работает, чтобы ты сделал правильный выбор не переплачивая.

    Обращаясь к нам, не удивляйся, если ты получишь честный и жесткий ответ – часто случается так, что мы знаем лучше, что именно нужно нашему гостю. Особенно это касается мобилизованных без опыта боевых действий. Здесь ты можешь полагаться на нашу экспертность.

    Одна из наших основных целей предоставить тебе возможность удобной и безопасной покупки: хоть за наличку, хоть по карте, хоть по счету. Повторимся, если нужна оптовая поставка, согласуем и отгрузим. Именно от того, как ты производишь оплату, зависит цена заказа.

    Для нас важно предоставить тебе качественную экипировку и снаряжение соблюдая при этом законы нашей страны. Боец, помни, мы помогаем фондам, нуждающимся людям, подразделениям в зоне СВО. Отчеты об этом опубликованы как на сайте. На эту деятельность уходит значительная часть выручки. Делая покупки в нашем магазине, ты помогаешь людям и фронту. Уверен, что это найдет отзыв в твоем сердце.

    У нашей команды есть набор ценностей: честность, справедливость, сопереживание, взаимопомощь, мужество, патриотичность. Уверены, ты их разделяешь, и мы легко найдем общий язык. Ну а если что-то пойдет не так, не руби с плеча, объясни, где мы ошиблись и поверь, мы разберемся и исправим. Наш девиз “In hostem omnia licita” – по отношению к врагу дозволено все. Возьми этот девиз, он поможет тебе принять правильное решение в трудной ситуации, с честью выполнить боевую задачу и вернуться домой живым и здоровым!

  25. I am not rattling great with English but I get hold this really easygoing to read .

  26. Llbhmm表示:

    buy generic trileptal online – cheap generic levothroid synthroid drug

  27. I see something really special in this internet site .

  28. Matthewchact表示:

    cost generic propecia tablets: cost of generic propecia without rx – order propecia for sale

  29. Lazrwde表示:

    Здравствуйте!
    Заказать диплом о высшем образовании.
    prof-aksay.ru/blogs/1/bolshoy-assortiment-dokumentov-v-izvestnom-internet-magazine.php

  30. I agree together with your conclusions and will eagerly glimpse ahead to your future updates.

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。