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

  1. Профессиональный сервисный центр по ремонту бытовой техники с выездом на дом.
    Мы предлагаем: сервисные центры в москве
    Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!

  2. Профессиональный сервисный центр по ремонту бытовой техники с выездом на дом.
    Мы предлагаем: сервисные центры по ремонту техники в москве
    Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!

  3. Josephfub表示:

    п»їbest mexican online pharmacies mexico drug stores pharmacies best online pharmacies in mexico

  4. Профессиональный сервисный центр по ремонту бытовой техники с выездом на дом.
    Мы предлагаем: сервисные центры в москве
    Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!

  5. MauriceGueda表示:

    Online medicine home delivery: india pharmacy mail order – indian pharmacy online

  6. Расценки на грузоперевозки liga-dostavok.ru

    Хотели найти грузоперевозки по россии рассчитать стоимость в интернете, тогда переходите на веб проект liga-dostavok.ru уже сейчас. По любому вопросу звоните по номеру 8(812)454-22-50 или закажите обратный звонок и мы Вам перезвоним. Офис расположен по адресу: Санкт-Петербург, Лиговский пр., д. 256. Звоните, регистрируйтесь на сайте, мы будем рады сотрудничать с Вами.

  7. Eugenesmivy表示:

    Drought-hit Danube River reveals scuttled German World War II ships
    гей порно
    The wrecks of explosives-laden Nazi ships sunk in the Danube River during World War II have emerged near Serbia’s river port town of Prahovo, after a drought in July and August that saw the river’s water level drop.

    Four vessels dating from before 1950 have also come to light in Hungary’s Danube-Drava National Park near Mohacs, where the Danube’s water level stood at only 1.5 meters (4.9 feet) on Tuesday, the lingering effect of severe heat waves and persistent drought in July and August.

    The vessels revealed in Prahovo were among hundreds scuttled along the Danube by Nazi Germany’s Black Sea fleet in 1944 as they retreated from advancing Soviet forces, destroying the ships themselves. The wrecks can hamper river traffic during low water levels.
    Strewn across the riverbed, some of the ships still have turrets, command bridges, broken masts and twisted hulls, while others lie mostly submerged under sandbanks.

    Endre Sztellik, a guard at the Danube-Drava national park, said of one of the ships, “we still don’t know what this is exactly. What is visible and an unfortunate fact is that the wreck is diminishing as people are interested in it and parts of it are going missing.”
    The Danube stood at 1.17 meters (3.8 feet) in Budapest on Tuesday, which compares with an all-time record low of around 0.4 meters (1.3 feet) registered in October 2018. During floods, the Danube rises well above 6 meters (19.7 feet).

    “Eastern Europe is experiencing critical drought conditions that are affecting crops and vegetation,” the European climate service Copernicus said on its website in its latest drought report, published earlier this month.

  8. You’ve articulated this issue perfectly.오피

  9. Если вы искали где отремонтировать сломаную технику, обратите внимание – сервис центр в перми

  10. Если вы искали где отремонтировать сломаную технику, обратите внимание – профи ремонт

  11. Если вы искали где отремонтировать сломаную технику, обратите внимание – ремонт бытовой техники в перми

  12. ArthurKib表示:

    http://indianpharmacy.company/# buy medicines online in india

  13. RobertMef表示:

    Ventolin: post haste pharmacy viagra – fred’s dollar store pharmacy

  14. RobertMef表示:

    Online medicine order: india pharmacy mail order – world pharmacy india

  15. Josephfub表示:

    levitra pharmacy rx one levitra at target pharmacy tesco uk pharmacy viagra

  16. MauriceGueda表示:

    buy prescription drugs from india: india pharmacy – pharmacy website india

  17. toto Macau表示:

    5 Situs Terpercaya Lessons Learned From Professionals toto Macau

  18. An outstanding share! I’ve just forwarded this onto a friend who had been conducting a little research on this. And he in fact ordered me lunch due to the fact that I found it for him… lol. So let me reword this…. Thanks for the meal!! But yeah, thanks for spending time to discuss this subject here on your website.

  19. Five Killer Quora Answers On Private Psychiatrist Ipswich Private Psychiatrist

  20. There is apparently a bunch to identify about this. I believe you made various good points in features also.

  21. RobertMef表示:

    pharmacy website india: indian pharmacy online – indian pharmacy

  22. I’m impressed, I must say. Genuinely rarely must i encounter a weblog that’s both educative and entertaining, and let me tell you, you’ve hit the nail around the head. Your notion is outstanding; ab muscles something that insufficient consumers are speaking intelligently about. We are happy that we came across this in my look for something with this.

  23. RobertMef表示:

    fluoxetine indian pharmacy: pharmacy mall – viagra mexico pharmacy

  24. Josephfub表示:

    buying from online mexican pharmacy mexican online pharmacies prescription drugs best online pharmacies in mexico

  25. I am usually to blogging we really appreciate your website content continuously. This content has truly peaks my interest. Let me bookmark your site and maintain checking achievable data.

  26. ArthurKib表示:

    https://pharmbig24.com/# reputable online pharmacy reddit

  27. 10 Of The Top Mobile Apps To Mobility Scooter Batteries Near Me Cheap Motor Scooters For Sale Near Me (Holmberg-Short.Federatedjournals.Com)

  28. Профессиональный сервисный центр по ремонту бытовой техники с выездом на дом.
    Мы предлагаем: ремонт бытовой техники в казани
    Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!

  29. Профессиональный сервисный центр по ремонту бытовой техники с выездом на дом.
    Мы предлагаем: ремонт бытовой техники в казани
    Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!

  30. Профессиональный сервисный центр по ремонту стиральных машин с выездом на дом по Москве.
    Мы предлагаем: ремонт стиральных машин москва срочно
    Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!

發佈留言

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