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

  1. I’m not sure where you are getting your information, but good topic. I needs to spend some time learning much more or understanding more. Thanks for great information I was looking for this info for my mission.

  2. What’s The Current Job Market For Uk Online Phone Shopping Sites Professionals Like?
    Uk Online Phone Shopping Sites

  3. Hang in there for eventually you are going to arrive to realise that lifestyle is much more exciting than you actually thought doable and even feel!

  4. Marcella表示:

    Are You Tired Of What Causes Mesothelioma Other Than Asbestos?
    10 Inspirational Resources To Invigorate Your Love Marcella

  5. 5 Killer Queora Answers On Managing ADHD Without Medication adhd medication for women (https://Forum.hardwarebase.net/)

  6. sarlab.ru表示:

    You’ll Be Unable To Guess Mobility Scooter Usa’s Tricks mobility scooter Usa
    (sarlab.ru)

  7. then obviously it will be more than you expected. There is nothing in this world which comes easy. Every thing in this world is very tough to get and the competition for getting the things has become very much tough.

  8. I just put the link of your blog on my Facebook Wall. very nice blog indeed.~;,”~

  9. You’ll Be Unable To Guess Automated Backlink Builder
    Software’s Tricks automated Backlink Builder software

  10. Vxiflf表示:

    buy divalproex without a prescription – topiramate 100mg pills order topiramate 100mg generic

  11. After study a few of the blog articles in your internet site now, and that i really appreciate your strategy for blogging. I bookmarked it to my bookmark web site list and you will be checking back soon. Pls look at my web-site also and figure out what you consider.

  12. See What Uk Online Shopping Sites For Mobile Tricks The Celebs Are Using Online Shopping Sites

  13. 12 Companies Are Leading The Way In Best CSGO Opening Site Counter-Strike Cases

  14. csgo Cases表示:

    Why Best Case CSGO Doesn’t Matter To Anyone csgo Cases

  15. Let’s Get It Out Of The Way! 15 Things About Best CSGO Opening
    Site We’re Tired Of Hearing counter-Strike Cases

  16. One Key Trick Everybody Should Know The One Double Glazing Repair
    Near Me Trick Every Person Should Be Aware Of Lock For Double Glazed Door

  17. www.Goda.nl表示:

    14 Questions You Shouldn’t Be Afraid To Ask About
    CSGO Skin Case Sites case opening (http://www.Goda.nl)

  18. csgo cases表示:

    5 Killer Quora Answers On Are CSGO Cases Predetermined csgo cases

  19. Which Website To Research 1kg Coffee Beans Price Online 1 Kg Of Coffee Beans

  20. I your writing style really loving this site.

  21. We appreciate you this phenomenal article. I especially enjoyed reviewing it and ought to speak about it to everyone.

  22. This Story Behind Penny Slots Will Haunt You For The Rest Of Your Life!
    casino slots guide

  23. Responsible For The CS GO Case Battles Budget?
    12 Ways To Spend Your Money cs2 Case opening

  24. csgo Cases表示:

    What’s The Ugly Real Truth Of How To Get CS GO Cases csgo Cases

  25. home repair can be difficult specially if you do not have any idea at all about what you are doing,,

  26. What Experts In The Field Of Repair Upvc Windows Want You To
    Learn repairing Upvc windows

  27. Zack Foxworth表示:

    20 Resources That Will Make You More Successful At Folding Electric Treadmill Zack Foxworth

  28. You lost me, buddy. I mean, I suppose I get what youre saying. I have an understanding of what you’re saying, but you just appear to have ignored that there are some other individuals within the world who see this issue for what it really is and may not agree with you. You may perhaps be turning away a lot of persons who may have been followers of your website.

  29. I’m really enjoying the design and layout of your site. It’s a very easy on the eyes which makes it much more pleasant for me to come here and visit more often. Did you hire out a designer to create your theme? Great work!

  30. Xqwtne表示:

    order hydrea sale – generic disulfiram 250mg methocarbamol where to buy

發佈留言

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