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

10,467 Responses

  1. Brianchoky表示:

    http://mexicanpharmacy.store/# pharmacies in mexico that ship to usa

  2. Jamesknowl表示:

    https://canadianpharmacy.win/# best rated canadian pharmacy

  3. Brianchoky表示:

    https://indianpharmacy.win/# mail order pharmacy india

  4. ClaytonGauct表示:

    real canadian pharmacy: best online canadian pharmacy – drugs from canada

  5. Jamesknowl表示:

    https://canadianpharmacy.win/# safe canadian pharmacy

  6. ClaytonGauct表示:

    canadapharmacyonline legit: onlinepharmaciescanada com – thecanadianpharmacy

  7. LarryHom表示:

    http://mexicanpharmacy.store/# п»їbest mexican online pharmacies

  8. LarryHom表示:

    http://indianpharmacy.win/# india pharmacy mail order

  9. Brianchoky表示:

    http://mexicanpharmacy.store/# buying prescription drugs in mexico

  10. Jamestus表示:

    Online medicine order online pharmacy india online pharmacy india

  11. RobertRep表示:

    Welcome to the New World Order of automakers. Soon, only the big survive
    первый анальный секс
    Honda and Nissan are the latest automakers to discuss combining forces. They won’t be the last.

    The two Japanese automakers announced last week that they plan to merge and create the world’s third largest automaker. Details aren’t yet finalized, but they expect to announce the combination within six months.

    Mergers in the auto industry are nothing new. They have taken place since the acquisition of various brands formed General Motors (GM) in the first decade of the 20th century. But experts say the Honda-Nissan deal could help to spark a string of combinations that could soon reshape the industry

    “I think the environment is there for additional mergers,” said Jeff Schuster, global vice president of automotive research for GlobalData. “I don’t think Honda-Nissan will cause more deals to take place, although it could accelerate them.”

    The factors driving possible deals, from technological change and the industry’s huge appetite for R&D and capital spending to thin profit margins, are numerous and powerful. The push toward consolidation is only going to get greater in coming decade. And it could be that only the biggest survive.

    “It gets more challenging to survive and not have economies of scale if everyone else does, especially as you move into new technology,” he said. “When you’re in a highly competitive market, it tends to create partners that might not have happened otherwise.”

  12. LarryHom表示:

    https://mexicanpharmacy.store/# best online pharmacies in mexico

  13. Brianchoky表示:

    http://mexicanpharmacy.store/# mexican mail order pharmacies

  14. Brianchoky表示:

    https://mexicanpharmacy.store/# mexican mail order pharmacies

  15. Jamesknowl表示:

    https://mexicanpharmacy.store/# п»їbest mexican online pharmacies

  16. ClaytonGauct表示:

    п»їlegitimate online pharmacies india: top online pharmacy india – indian pharmacy

  17. Jamestus表示:

    п»їbest mexican online pharmacies buying prescription drugs in mexico buying from online mexican pharmacy

  18. Jamesknowl表示:

    http://mexicanpharmacy.store/# mexican drugstore online

  19. Brianchoky表示:

    http://mexicanpharmacy.store/# medicine in mexico pharmacies

  20. Jamesknowl表示:

    http://mexicanpharmacy.store/# mexico drug stores pharmacies

  21. ClaytonGauct表示:

    indian pharmacy: buy medicines online in india – best online pharmacy india

  22. Brianchoky表示:

    https://canadianpharmacy.win/# cheap canadian pharmacy

  23. Brianchoky表示:

    https://mexicanpharmacy.store/# reputable mexican pharmacies online

  24. Jamestus表示:

    medicine in mexico pharmacies mexican rx online medication from mexico pharmacy

  25. LarryHom表示:

    http://canadianpharmacy.win/# best canadian pharmacy

  26. LarryHom表示:

    https://mexicanpharmacy.store/# buying from online mexican pharmacy

  27. BarryHag表示:

    Codigo promocional 1xBet 2025: 1XBONO25 ao se inscrever para um Bonus de boas-vindas para novos jogadores 100% hasta 130€ en apuestas deportivas. Es importante saber que el codigo promocional 1xBet ofrece a los usuarios acceso a un unico bono de bienvenida. Este debe ser seleccionado al momento del registro y estara activo al momento de hacer el primer deposito.

    https://bxti.com.mx/wp-content/pgs/el_codigo_promocional-1xbet.html – codigo promocional 1xbet chile

    El codigo promocional 1xBet: 1XBONO25, valido 2025, debe ser ingresado al momento de realizar la inscripcion en el operador para conseguir el bono de bienvenida para apuestas deportivas o casino 1xbet. En caso de tener problemas con el uso del codigo promocional 1xBet, los usuarios pueden contactar al servicio al cliente.

  28. ClaytonGauct表示:

    buying prescription drugs in mexico: mexico drug stores pharmacies – best online pharmacies in mexico

  29. NestorVocky表示:

    Le code promo 1xBet 2025: 1XNEW25, saississez-le lors de votre inscription pour recevoir un bonus jusqu’a $130 sur le sport. Vous pourrez aussi obtenir jusqu’a $1,500 et 150 tours gratuits sur le casino. 1xBet propose jusqu’a $130 de freebets selon le montant de votre premier depot sur les paris sportifs. Parmi eux, le bonus de bienvenue, reserve aux nouveaux inscrits sur la plateforme. Cette plateforme est classee parmi les leaders en Afrique et a travers le monde. Elle vous offre les meilleures options pour vos paris, y compris la diffusion en direct des matchs sans frais supplementaires.

    https://saloncloudsplus.com/authpaymet/pgs/le-code-promo-1xbet-actuel.html – code promo 1xbet ci

    Utilisez le code promo 1xBet: “1XNEW25” en 2025. Vous pourrez debloquer un bonus de bienvenue jusqu’a $130 sur les paris sportifs. Et n’oubliez pas que 1xBet offre une belle opportunite a tous les nouveaux clients. En utilisant ce code lors de votre inscription, pourrez recuperer jusqu’a $130 sur le sport et jusqu’a $1,500 en freebets et 150 tours gratuits sur le casino en ligne. Pour profiter de ce bonus exceptionnel, il vous suffit d’effectuer votre premier depot. Celui-ci vous donne droit a un bonus de 100% du montant depose, jusqu’a un maximum de $130, ou l’equivalent dans votre devise.

  30. 10 Places That You Can Find Ultra Realistic Sexdoll ultra realistic Sex Dolls

發佈留言

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