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

  1. SamuelCic表示:

    https://amoxil.llc/# amoxicillin buy online canada

  2. Stevecoalo表示:

    Look of the Week: Forget the naked dress, Kendall Jenner makes the case for underwear as outerwear
    kraken тор браузер

    On Monday, Kendall Jenner stepped out onto the L’Oreal Paris womenswear runway in a scarlet red Mugler gown that might have looked familiar to anyone with a sharp memory of 1999.

    The front of the dress was slashed open across Jenner’s right shoulder, exposing a matching denier bra. The peekaboo moment conjured up memories of another example of fashionable flashing: Lil’ Kim’s purple embellished jumpsuit at the VMAs 26 years earlier. On the red carpet, Kim’s left breast was almost entirely revealed by an asymmetrical cut — a mirror image of Jenner’s neckline — save for a matching purple nipple pasty.
    Jenner’s Mugler moment was just the latest example of a resurging tendency for underwear as outerwear. At the Nensi Dojaka runway show in London earlier this month, boxy blazers were shrugged over strappy bras while paneled bustiers in sheer fabric were paired with capri trousers and reimagined as going out tops. Brasseries were even left exposed to the elements at Erdem — a departure for a house beloved by both British acting royalty (Kristen Scott Thomas) and actual royalty (the Duchess of Cambridge). Dolce & Gabbana got the memo, too, showing satin corsets, garter belts and Madonna-esque cone bras at Milan Fashion Week on Saturday. Florence Pugh even wore one of the label’s risque designs in her first British Vogue cover last week — the circle neckline of her puff-shouldered black dress scooping just above the belly button, acting as a full-frontal frame for her bra.
    But the trend extends beyond just the runways. During the first performance of her “Short n’ Sweet” tour on Monday, singer Sabrina Carpenter took to the stage in a custom Victoria’s Secret bodysuit and stockings. Hand-adorned with over 150,000 crystals, the strapless pink lace-trimmed leotard took over 140 hours to make. On Monday,YouTube star and singer Jojo Siwa inverted the fad by donning a codpiece for a headline-grabbing cover shoot with LadyGunn magazine. The 15th century undergarment was bedazzled with flesh-colored gemstones.

  3. Тут делают продвижение разработка сайт медицинской клиники разработка сайт медицинского центра

  4. Тут делают продвижение создание сайта для медицинского центра разработка сайтов для медицинских центров

  5. Тут делают продвижение сео продвижение медицинских сайтов комплексное продвижение медицинских сайтов

  6. blue dream表示:

    Hi there! This article couldn’t be written much better! Going through this post reminds me of my previous roommate! He constantly kept talking about this. I’ll forward this post to him. Fairly certain he will have a very good read. Many thanks for sharing!

  7. NicolasLoole表示:

    https://zithromax.company/# zithromax drug

  8. Ремонт телефонов表示:

    Профессиональный сервисный центр где можно отремонтировать телефон ремонт телефонов в москве адреса

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

  10. Aqkbdq表示:

    buy flagyl 400mg pills – oral flagyl 200mg cenforce 50mg cheap

  11. bookmarked!!, I love your website.

  12. DPM+ предлагает не просто организация управления продуктом а настоящую трансформацию ваших навыков. С нами вы получите доступ к уникальному опыту профессионалов, который вы не найдете у других. Мы используем современные методики, которые гарантируют реальные результаты. Убедитесь, что обучение может быть лучшим с нами!

  13. Is Tech Making Jaguar X Type Key Fob Better Or Worse?
    replacement jaguar car Keys

  14. Тут делают продвижение комплексное продвижение медицинских сайтов seo-продвижение медицинских сайтов

  15. ForrestVal表示:

    pin up casino giris: pin-up casino giris – pin up guncel giris

  16. Santopax表示:

    https://pinupru.site/# пин ап казино зеркало

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

  18. Gabrielwaimb表示:

    пинап кз https://pinupkz.tech/# пин ап казахстан
    пин ап 634

  19. Gabrielwaimb表示:

    пин ап казино https://pinupru.site/# pin up
    pin up

  20. ForrestVal表示:

    пин ап официальный сайт: пин ап казино вход – pin up зеркало

  21. Тут делают продвижение seo. медицинских. сайтов медицинский seo

  22. Santopax表示:

    http://pinupru.site/# пин ап зеркало

  23. Robertdef表示:

    pin up pinup az pin up 306

  24. Robertdef表示:

    пин ап зеркало пин ап вход pin up казино

  25. Займ онлайн на карту без отказа без проверки мгновенно круглосуточно доступны всем с 18 лет. Лучшие МФО обеспечивают мгновенную выдачу – это быстрее и удобнее, чем в банке.

  26. Тут делают продвижение разработка медицинских сайтов разработка медицинского сайта

  27. Тут делают продвижение seo медицинских сайтов seo-продвижение медицинских сайтов

  28. В магазине сейфов предлагают купить сейф взломостойкий в москве взломостойкие сейфы цена

發佈留言

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