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...

3,269 Responses

  1. WilliamRhype表示:

    https://lisinopril.network/# lisinopril 104

  2. Ronaldpsymn表示:

    http://lisinopril.network/# buying lisinopril online

  3. RandallTaulp表示:

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

  4. EarnestAvada表示:

    В нашем обществе, где диплом – это начало удачной карьеры в любом направлении, многие ищут максимально быстрый и простой путь получения образования. Факт наличия официального документа об образовании переоценить просто невозможно. Ведь именно диплом открывает дверь перед любым человеком, желающим начать профессиональную деятельность или продолжить обучение в высшем учебном заведении.
    Предлагаем оперативно получить этот важный документ. Вы можете купить диплом старого или нового образца, и это будет отличным решением для всех, кто не смог закончить обучение, потерял документ или хочет исправить свои оценки. дипломы изготавливаются аккуратно, с особым вниманием ко всем нюансам, чтобы на выходе получился 100% оригинальный документ.
    Преимущество такого решения заключается не только в том, что вы сможете максимально быстро получить диплом. Процесс организован комфортно, с профессиональной поддержкой. От выбора требуемого образца диплома до точного заполнения личной информации и доставки по России — все будет находиться под полным контролем опытных специалистов.
    Для всех, кто ищет быстрый и простой способ получить необходимый документ, наша компания предлагает выгодное решение. Приобрести диплом – значит избежать длительного процесса обучения и не теряя времени переходить к достижению личных целей, будь то поступление в университет или начало удачной карьеры.

    https://dlplomanrussian.com

  5. RandallTaulp表示:

    where to buy lisinopril without prescription: purchase lisinopril online – zestoretic price

  6. RandallTaulp表示:

    cipro for sale: ciprofloxacin 500mg buy online – cipro pharmacy

  7. Davidtes表示:

    cipro 500mg best prices buy cipro online where can i buy cipro online

  8. Davidtes表示:

    where can i purchase lisinopril zestril 20 mg lisinopril 25 mg

  9. Davidtes表示:

    lisinopril 2.5 mg tablet lisinopril 40mg prescription cost lisinopril in usa

  10. Rbiumo表示:

    lopressor 100mg generic – buy generic metoprolol online brand adalat

  11. WilliamRhype表示:

    http://lisinopril.network/# lisinopril 40 mg mexico

  12. Ronaldpsymn表示:

    https://nolvadex.life/# tamoxifen hormone therapy

  13. WilliamRhype表示:

    https://ciprofloxacin.tech/# buy cipro cheap

  14. WilliamRhype表示:

    https://lisinopril.network/# lisinopril 20 mg canadian

  15. OLaneevige表示:

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

    https://dlplomanrussian.com

  16. RandallTaulp表示:

    ciprofloxacin 500mg buy online: cipro – cipro pharmacy

  17. Davidtes表示:

    cheap propecia online buy generic propecia without insurance buy generic propecia

  18. Davidtes表示:

    rx lisinopril 10mg lisinopril 10 mg 12.5mg zestril pill

  19. Davidtes表示:

    common side effects of tamoxifen common side effects of tamoxifen benefits of tamoxifen

  20. RandallTaulp表示:

    lisinopril 3.125: lisinopril tab 100mg – 100 mg lisinopril

  21. RandallTaulp表示:

    Abortion pills online: Misoprostol 200 mg buy online – cytotec abortion pill

  22. WilliamRhype表示:

    http://cytotec.club/# buy cytotec in usa

  23. StephenDeery表示:

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

    https://diploman-russiyan.com

  24. WilliamRhype表示:

    http://ciprofloxacin.tech/# ciprofloxacin generic price

  25. WilliamRhype表示:

    http://finasteride.store/# propecia otc

  26. Sijihw表示:

    lanoxin 250 mg uk – buy generic irbesartan for sale buy generic lasix online

  27. Ronaldpsymn表示:

    http://ciprofloxacin.tech/# buy cipro online without prescription

  28. Davidtes表示:

    tamoxifen for men tamoxifen and bone density tamoxifen breast cancer prevention

  29. Davidtes表示:

    buy cytotec online fast delivery cytotec buy online usa buy cytotec over the counter

  30. RandallTaulp表示:

    get propecia tablets: get cheap propecia without insurance – cost cheap propecia online

發佈留言

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