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

  1. Cazrxjd表示:

    Привет, друзья!
    Мы можем предложить документы техникумов
    telegra.ph/kupit-diplom-v-komsomolske-na-amure-08-13-9

  2. DouglasGed表示:

    indian pharmacy online: Online medicine home delivery – indian pharmacy online

  3. Telegra.ph表示:

    5 The 5 Reasons Replacement Upvc Window Handles Is Actually A Great Thing repairs to upvc windows,
    Telegra.ph,

  4. I’d like to thank you for the efforts you have put in writing this site. I really hope to see the same high-grade blog posts by you later on as well. In truth, your creative writing abilities has encouraged me to get my own, personal site now 😉

  5. DouglasGed表示:

    online ed pills: Best ED meds online – cheapest ed meds

  6. Leonardpar表示:

    https://indiapharmacy.shop/# п»їlegitimate online pharmacies india

  7. Diplomi_prEa表示:

    Привет!
    Купить документ о получении высшего образования вы имеете возможность в нашем сервисе.
    dharmakathayen.com/fact-checking-policy/#comment-492348

  8. Lazrjaa表示:

    Здравствуйте!
    Мы готовы предложить дипломы психологов, юристов, экономистов и прочих профессий по приятным тарифам.
    telegra.ph/novye-standarty-obucheniya-v-medicinskih-vuzah-08-02

  9. Trefymu表示:

    Привет!
    Легальные способы покупки диплома о среднем полном образовании
    pcomp-it.blogspot.com/2012/01/cddvd
    Окажем помощь!.

  10. Robertontof表示:

    Юридический портал Соцправ.ру
    ук 159
    – окажет вам помощь в решении сложных правовых проблем. У нас вы найдете качественную и грамотную юридическую поддержку в любой ситуации. Основной целью нашего проекта является помощь в защите ваших прав. Наши специалисты позаботятся о том, чтобы вы могли защитить свои интересы в любой проблемной ситуации. Мы предоставляем актуальную юридическую информацию по вопросам жилищного и земельного права, разделу имущества и алиментам, наследству, опеке и усыновлению. Если ваши права нарушены, специалисты нашего сайта всегда придут на помощь. Мы готовы оказать вам юридическую поддержку онлайн или по телефону в круглосуточном режиме.

  11. JimmyHab表示:

    Адвокаты Москвы
    юридическая консультация бесплатная в москве
    Мы успешно защищаем права и свободы юридических и физических лиц. Колоссальный и зачастую уникальный опыт, а также высокая квалификация наших сотрудников позволяют нам достигать результата, в максимальной степени отвечающего интересам клиента. Наши специалисты состоят в адвокатской палате которая на сегодняшний день является наиболее авторитетной в России. Благодаря многочленным блистательным победам в громких и, по мнению многих, бесперспективных делах, наши сотрудники снискали уважение не только в РФ, но и за рубежом.
    Если вам нужен адвокат в Москве просто обратитесь к нам и вы получите квалифицированную помощь в решении ваших проблем. Как показывает практика, в большинстве дел, в которых принимали участие наши адвокаты, суд выносил решение в пользу их клиентов. Кроме того, мы осуществляем страхование своей ответственности на 5 млн рублей. Такие гарантии вам не предложит ни одна юридическая компания.

    Стоит отметить, что за все то время, что работает наша компания не было прецедента, когда в результате действий наших специалистов клиенту был бы нанесен ущерб и возникла необходимость в страховой поддержке.

    Адвокатские услуги
    Адвокаты и юристы Москвы оказывают услуги в различных областях права: гражданского, арбитражного, уголовного и др. Нашими клиентами являются жители как столицы, так и других городов России. Для решения задач, которые стоят перед нашим клиентом, мы готовы оказать разовую помощь правового характера или сотрудничать на постоянной основе.

  12. DouglasGed表示:

    cheap erection pills: online ed prescription same-day – where to buy erectile dysfunction pills

  13. Thomasknith表示:

    Life is Good — почему произошёл технический СКАМ проекта
    гей порно парни
    Компания «Life Is Good» позиционировала себя как финансово-консалтинговый проект. Она привлекала денежные активы от клиентов, формируя из них инвестиционные вклады, которые приносят пассивный доход от 20% годовых в валюте.

    Официальный сайт компании — lifeisgood.company. Ценной информации на нем очень мало. В разделе «О компании» вместо рассказа о том, чем занимается компания, — общие фразы про финансовую независимость и благополучие клиентов, а также шесть рекламных роликов с известными людьми.
    Данная компания создана в 2014 году. Зарегистрирована в государстве-офшоре Белиз, что находится в Центральной Америке. Соответственно, выданный там сертификат не имеет на территории России никакой юридической силы. Лицензия ЦБ РФ отсутствует.

    Руководитель компании — Роман Василенко, обладатель многочисленных фотошопных регалий, количеству которых позавидовал бы даже Александр Невский (уот так уот), ветеран МЛМ движения в РФ, ну практически святой человек.

    С 1990 года по 1999 год служил в Вооруженных силах РФ.

    После службы работал в инвестиционной компании Save-Invest (Si), зарегистрированной в Швейцарии, которая обещала инвестиционные продукты со сверх доходностью. В 2000х годах газета Коммерсантъ выпустила статью о расследовании сотрудников ФСБ на предмет ведения мошеннической деятельности в РФ.

    В 2012 году руководитель Оренбургского управления Татьяна Горынина, обманувшая своих клиентов на 50 млн. получила 6 лет тюрьмы за мошенничество.

    Далее работал в инвестиционной компании “Life Division”, которая до сих пор продолжает свою работу.

    Также Роман активно ведёт блог в инстаграмме и на ютуб, темы всё те же — успешный успех, освободись от рабства, нужно только захотеть и т.д.

    Участники делали ежемесячные взносы в счет стоимости будущей квартиры. Значительная часть средств шла организаторам компании, а все остальное делились между вышестоящими пайщиками.
    Наступила стадия «критического дна», т.е. взносов от новичков поступало меньше, чем необходимо выплачивать более «старым» клиентам, основатели компании приостановили свою деятельность, а суммы, которые многие годы вносили пайщики, им просто не вернули.

    Life Is Good позиционировала себя как европейская компания, но привлекала в основном Россиян. Кстати, официальный сайт Life is Good переведен сразу на 9 языков. Непонятно для чего это сделано, ведь компания работает только в России, Казахстане и Киргизии. Наверное, поэтому над переводом на английский язык здесь не стали заморачиваться. С первого взгляда видны грубые грамматические ошибки.

    Компания работала в сотрудничестве с еще тремя: Best Way, Hermes Management и Vista.

    Гарантий сохранности денег не давала ни «Лайф-из-гуд», ни «Гермес-менеджмент». Но при этом «Лайф-из-гуд» все же предлагала страхование вложенных денег по оригинальной схеме.

  14. Leonardpar表示:

    http://edpillpharmacy.store/# buy ed pills online

  15. 78win表示:

    You’re so cool! I do not believe I’ve read anything like that before. So great to discover somebody with original thoughts on this issue. Really.. many thanks for starting this up. This site is something that’s needed on the web, someone with some originality.

  16. notube表示:

    Your style is unique in comparison to other people I have read stuff from. I appreciate you for posting when you have the opportunity, Guess I’ll just book mark this web site.

  17. DouglasGed表示:

    online prescription for ed: ED meds online with insurance – cheap boner pills

  18. Yrefkzt表示:

    Здравствуйте!
    Купить диплом любого университета.
    fh7778nc.bget.ru/users/odato

  19. Trefyos表示:

    Добрый день!
    Легальные способы покупки диплома о среднем полном образовании
    nataliatra.blogspot.com/2017/04/blog-post_79
    Рады оказаться полезными!.

  20. 15 Of The Most Popular Leather Sectional Sleeper Sofa
    Bloggers You Must Follow best sleeper sofa Brands

  21. Lazrkhg表示:

    Здравствуйте!
    Мы изготавливаем дипломы любых профессий по невысоким тарифам.
    telegra.ph/kak-proishodit-oplata-obucheniya-v-vuze-08-02

  22. That is a great tip particularly to those fresh to the blogosphere. Short but very precise information… Appreciate your sharing this one. A must read article.

  23. DouglasGed表示:

    mexico pharmacies prescription drugs: Certified Mexican pharmacy – purple pharmacy mexico price list

  24. Leonardpar表示:

    https://edpillpharmacy.store/# ed medicine online

  25. Lazrzsb表示:

    Здравствуйте!
    Мы изготавливаем дипломы любых профессий по приятным ценам.
    telegra.ph/materinskij-kapital-na-obuchenie-v-vuze-08-02

  26. Diplomi_rqEa表示:

    Добрый день!
    Приобрести документ университета вы можете в нашем сервисе.
    японецавто.рф/forum/user/52304

  27. The very next time I read a blog, Hopefully it won’t disappoint me as much as this one. I mean, I know it was my choice to read, however I truly believed you would probably have something helpful to talk about. All I hear is a bunch of moaning about something that you could fix if you were not too busy looking for attention.

  28. DouglasGed表示:

    buy prescription drugs from india: Indian pharmacy online – reputable indian online pharmacy

發佈留言

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