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,875 Responses

  1. WayneCoirl表示:

    mexican rx online: purple pharmacy mexico price list – mexico drug stores pharmacies

  2. DominicJaw表示:

    medication from mexico pharmacy: mexican rx online – buying prescription drugs in mexico online

  3. There are a couple of fascinating points over time in the following paragraphs but I don’t determine if I see them all center to heart. There is certainly some validity but I most certainly will take hold opinion until I look into it further. Good post , thanks therefore we want much more! Added onto FeedBurner in addition

  4. Dnrtzff表示:

    Здравствуйте!
    Заказать документ о получении высшего образования вы можете у нас в Москве.
    ast-diplomas24.ru/kupit-diplom-nizhnij-novgorod
    Удачи!

  5. I needed to thank you for this fantastic read!! I certainly loved every little bit of it. I have you book-marked to check out new stuff you post…

  6. Arnoldten表示:

    mexican border pharmacies shipping to usa mexican pharmacy mexico pharmacy

  7. DominicJaw表示:

    purple pharmacy mexico price list: mexican border pharmacies shipping to usa – mexican pharmaceuticals online

  8. WayneCoirl表示:

    mexico drug stores pharmacies: mexican drugstore online – pharmacies in mexico that ship to usa

  9. Trefptv表示:

    Здравствуйте!
    Процесс получения диплома стоматолога: реально ли это сделать быстро?
    skillsofblocks.com/купить-диплом-о-высшем-образовании-ре/
    Рады оказаться полезными!.

  10. Lazrtud表示:

    Добрый день!
    Мы готовы предложить дипломы любой профессии по приятным тарифам.
    mandiplomikx.ru

  11. 20 Resources That’ll Make You Better At Couches L Shape Oversized couch

  12. Danielned表示:

    Это просто возмутительно, что кооператив «Бест Вей» и его основателя Романа Василенко пытаются обвинить в чем-то нелегальном! Все эти обвинения – сплошная ложь и подтасовка фактов. Они помогают людям купить жилье без процентов, чего банки никогда не сделают. Почему власти и банкиры ополчились на них? Потому что кооператив стал конкурентом ипотечным программам! Это явное давление на успешный и социально значимый проект. Вместо того чтобы поддерживать инициативу, которая действительно помогает людям, они блокируют счета и мешают работе кооператива. Это недопустимо, и мы должны стоять горой за Романа и «Бест Вей»!

  13. Mazrglz表示:

    Привет, друзья!
    Как правильно приобрести диплом колледжа или ПТУ в России, важные моменты
    mans-diploms.ru

  14. Lazrpya表示:

    Привет, друзья!
    Заказать диплом университета.
    lastdemo.primepix.ru/club/user/88/blog/8745/

  15. JamesKix表示:

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

  16. Diplomi_bfEa表示:

    Привет!
    Приобрести документ о получении высшего образования можно у нас.
    ast-diploms.com/kupit-diplom-s-registraciej

  17. After I initially commented I appear to have clicked the -Notify me when new comments are added- checkbox and from now on every time a comment is added I get four emails with the same comment. Is there a way you can remove me from that service? Cheers.

  18. Lazrzmn表示:

    Привет, друзья!
    Мы изготавливаем дипломы психологов, юристов, экономистов и других профессий по выгодным ценам.
    diploms-man.ru

  19. Xazrxbv表示:

    Привет!
    Как избежать рисков при покупке диплома колледжа или ПТУ в России
    landik-diploms-srednee.ru/kupit-diplom-v-novosibirske В 

  20. Manrnuj表示:

    Привет!
    Приобрести документ университета
    ast-diplomy.com/kupit-diplom-magistra

  21. Danrffs表示:

    Привет!
    Мы предлагаем дипломы любой профессии.
    picbok.org/read-blog/4658_nadezhnyj-internet-magazin-s-obshirnym-vyborom-dokumentov.html
    Окажем помощь!.

  22. A reputable mesothelioma lawyer will review your military or work background to determine where
    and when Asbestos lawyer exposure is likely to have occurred.
    They can also provide information on different types of
    compensation.

  23. 7 Tips About Window Repair Near That Nobody Can Tell You upvc window repair Near Me

  24. Lazrcfi表示:

    Привет, друзья!
    Купить диплом любого университета.
    stroimarket-komi.ru/club/user/54/blog/38295/

  25. Dnrtafw表示:

    Привет!
    Приобрести документ о получении высшего образования вы сможете в нашей компании.
    asxdiplomik24.ru/kupit-diplom-omsk
    Успехов в учебе!

  26. y2mate表示:

    Hi! I just would like to give you a big thumbs up for the great information you have right here on this post. I’ll be coming back to your web site for more soon.

  27. Jtlycb表示:

    cheap finax pills – order alfuzosin online alfuzosin usa

  28. Mazrymi表示:

    Привет!
    Как избежать рисков при покупке диплома колледжа или ПТУ в России
    karriere.kv-architektur.de/купить-диплом-иргупс/

  29. When You Should And Should Never Get Credit 대출 이자 계산기

  30. How Boat Accident Lawyers Has Become The Most Sought-After Trend
    In 2023 Boat Accident Law Firms

發佈留言

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