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

  1. MarvinRoave表示:

    neurontin 600 mg coupon neurontin canada online neurontin uk

  2. MarvinRoave表示:

    buy zithromax online australia where to get zithromax over the counter zithromax capsules price

  3. MarvinRoave表示:

    order doxycycline 100mg without prescription order doxycycline online buy generic doxycycline

  4. Henryfet表示:

    cheap generic prednisone: prednisone 40 mg – buy prednisone online without a prescription

  5. Billyved表示:

    http://prednisoned.online/# canada pharmacy prednisone

  6. Charleselila表示:

    amoxicillin 500 mg tablet: price for amoxicillin 875 mg – amoxicillin 825 mg

  7. Henryfet表示:

    can i buy zithromax online: zithromax 250 mg pill – how to get zithromax over the counter

  8. Richardorele表示:

    zithromax tablets: can you buy zithromax over the counter in australia – zithromax coupon

  9. Henryfet表示:

    neurontin 800: neurontin 800mg – buy gabapentin

  10. Richardorele表示:

    zithromax: zithromax 500mg price – zithromax tablets for sale

  11. Billyved表示:

    https://zithromaxa.store/# zithromax prescription online

  12. Lewisslund表示:

    В нашем мире, где диплом – это начало отличной карьеры в любой отрасли, многие ищут максимально быстрый путь получения качественного образования. Наличие документа об образовании сложно переоценить. Ведь именно он открывает дверь перед людьми, стремящимися начать трудовую деятельность или продолжить обучение в университете.
    Мы предлагаем оперативно получить любой необходимый документ. Вы можете купить диплом, и это является отличным решением для человека, который не смог закончить обучение или потерял документ. Все дипломы производятся с особой тщательностью, вниманием ко всем деталям. В итоге вы сможете получить продукт, полностью соответствующий оригиналу.
    Превосходство такого подхода состоит не только в том, что вы сможете максимально быстро получить свой диплом. Процесс организовывается комфортно, с профессиональной поддержкой. Начав от выбора нужного образца документа до консультаций по заполнению персональной информации и доставки по России — все под абсолютным контролем качественных специалистов.
    В итоге, для тех, кто ищет быстрый способ получения необходимого документа, наша компания предлагает отличное решение. Приобрести диплом – это значит избежать долгого обучения и не теряя времени перейти к личным целям, будь то поступление в ВУЗ или начало профессиональной карьеры.
    https://www.diploman-russiyan.com/

  13. Billyved表示:

    https://doxycyclinea.online/# how to buy doxycycline online

  14. MarvinRoave表示:

    how much is generic neurontin neurontin capsules 600mg neurontin 800mg

  15. MarvinRoave表示:

    how to order doxycycline generic doxycycline doxycycline 500mg

  16. Henryfet表示:

    doxycycline hydrochloride 100mg: buy doxycycline online uk – doxycycline 100mg dogs

  17. Billyved表示:

    http://prednisoned.online/# 25 mg prednisone

  18. Henryfet表示:

    order prednisone 10 mg tablet: prednisone for cheap – price for 15 prednisone

  19. Richardorele表示:

    buy doxycycline online without prescription: doxycycline without prescription – doxycycline tetracycline

  20. Henryfet表示:

    doxycycline tablets: online doxycycline – doxy 200

  21. Billyved表示:

    http://doxycyclinea.online/# buy generic doxycycline

  22. 15 Unquestionably Reasons To Love Find Accident Attorney Springfield Accident Attorney

  23. Billyved表示:

    http://amoxila.pro/# amoxil pharmacy

  24. Charleselila表示:

    buy zithromax no prescription: purchase zithromax online – zithromax 500

  25. Ismaelfer表示:

    В современном мире, где диплом является началом удачной карьеры в любом направлении, многие ищут максимально простой путь получения качественного образования. Наличие документа об образовании трудно переоценить. Ведь именно он открывает дверь перед людьми, стремящимися вступить в профессиональное сообщество или учиться в университете.
    Предлагаем быстро получить любой необходимый документ. Вы можете купить диплом нового или старого образца, что становится удачным решением для всех, кто не смог закончить обучение, потерял документ или хочет исправить свои оценки. Все дипломы производятся аккуратно, с особым вниманием к мельчайшим нюансам. На выходе вы сможете получить полностью оригинальный документ.
    Превосходство этого решения состоит не только в том, что вы сможете максимально быстро получить свой диплом. Процесс организовывается удобно, с нашей поддержкой. От выбора необходимого образца документа до грамотного заполнения персональной информации и доставки по России — все будет находиться под абсолютным контролем наших специалистов.
    Всем, кто ищет быстрый способ получить требуемый документ, наша компания предлагает выгодное решение. Заказать диплом – значит избежать длительного процесса обучения и сразу переходить к личным целям: к поступлению в университет или к началу успешной карьеры.
    https://www.diploman-russiyan.com/

  26. MarvinRoave表示:

    prednisone canada pharmacy prednisone for dogs prednisone rx coupon

  27. MarvinRoave表示:

    neurontin tablets no script neurontin cost gabapentin 300mg

  28. MarvinRoave表示:

    amoxicillin 500mg buy online uk buy amoxicillin online cheap amoxicillin capsule 500mg price

  29. Henryfet表示:

    doxycycline hyc 100mg: how to order doxycycline – doxycycline hydrochloride 100mg

  30. Charleselila表示:

    amoxicillin over the counter in canada: amoxicillin generic brand – amoxicillin 500mg buy online canada

發佈留言

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