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

6,240 Responses

  1. The 10 Scariest Things About Double Glazing Near Me double glazing company Near me

  2. Guide To Double Glazed Window Near Me: The Intermediate Guide To Double Glazed Window Near Me double glazed window near me

  3. 10 Meetups About Integrated Side By Side Fridge Freezers You Should Attend http://www.36035372.xyz

  4. Is Technology Making Double Glazed Near Me Better Or Worse?
    Replace Double glazed units

  5. Lucille表示:

    17 Reasons Why You Shouldn’t Be Ignoring Best
    Coffee Machines Lucille

  6. Your passion for this subject is contagious.프라그마틱 이미지

  7. Wanda表示:

    See What Double Glazed Window Repairs Near Me Tricks The Celebs Are Using window
    repairs near me (Wanda)

  8. northfork.co表示:

    Four Cardinal Rules For Playing Firm Card Game 학자금 대출; northfork.co,

  9. Cherie表示:

    What Do You Do To Know If You’re Ready To Go After Double Glazed Window Luton glass windows
    repair (Cherie)

  10. This Is How Double Glazed Units Near Me Will Look Like In 10 Years’ Time
    replacement double glazed units near me; http://comphy.kr/,

  11. Seo Tips: Search Engine Optimization And Increasing Your Blog’s Ranking 백링크 대행 (heroniran81.bloggersdelight.dk)

  12. Grace Periods Do Operate In Property Finance Loan Modification 200만원 대출

  13. Paying Points On A Home Loan Loan: When Was Is An Idea? 직장인 대출 (americasmostexcitingbank.com)

  14. 20 Things That Only The Most Devoted Upvc Window
    Repairs Fans Are Aware Of upvc windows Repair near me

  15. 구글SEO表示:

    Link Building – Towards You To Higher Search Engine Ranking 구글SEO

  16. 10 Life Lessons We Can Learn From Personal Injury Lawyers personal injury attorney

  17. The No. 1 Question Everyone Working In Birth Injury Litigation Needs
    To Know How To Answer Birth Injury law firm

  18. What Is The Reason? Asbestos And Mesothelioma
    Claims Is Fast Becoming The Most Popular Trend In 2023? http://www.9363280.xyz

  19. SamuelJouro表示:

    Аренда телесуфлеров в Москве, Аренда и обслуживание телесуфлеров в Москвеhttps://телесуфлер.рф/

  20. Guide To Employers Liability Act Fela: The Intermediate Guide On Employers Liability
    Act Fela liability act Fela

  21. 10 Strategies To Build Your Veterans Disability Lawsuit Empire veterans disability law firm

  22. What Is Programing Car Keys And How To Use It http://www.5611432.xyz

  23. eddafay.top表示:

    Are You Getting Tired Of Childrens Bunk Bed? 10
    Inspirational Sources To Revive Your Passion eddafay.top

  24. Ewan表示:

    10 Tell-Tale Signs You Need To Get A New Upvc Window Repairs upvc window
    repairs near me [Ewan]

  25. Snwfza表示:

    ondansetron oral – cheap procyclidine without prescription requip 2mg drug

  26. What’s The Current Job Market For Double Glazing Repairs Near Me Professionals Like?
    Double Glazing Repairs Near Me

  27. See What Double Glazing Glass Replacement Near Me Tricks The Celebs
    Are Utilizing double Glazing glass (https://canadianairsoft.wiki)

發佈留言

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