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

  1. Reent表示:

    At 247Poker, you can practice some basic poker skills and actually develop reasonable hand-reading abilities while risking nothing, which is why I highly recommend it as a training tool for novice players. PokerUP is the leading games to play with friends online. It has a table for three players at a time. Although it does not include gambling with real money, it is played amongst the adults only. It allows to access the contact and invites up to 3 three people from your contact and initiate the game. The other benefits that are the highlights of the match include message while playing, applying night theme and simple settings. You don’t have permission to view this page. WSOP, perhaps the world’s most famous poker brand, offers free poker online through its PlayWSOP platform. The free poker site is available as a no-download desktop client, with a quick one-click sign up process if you want to use your existing Facebook or Google account to register.
    https://wiki-canyon.win/index.php?title=Rarest_poker_hand
    So, whilst Machine Learning may help you predict other events and problems with more data and patterns, it cannot be used to predict lottery results as the lottery uses no particular design. This website sources lottery data from New York Lottery, Florida Lottery, California Lottery, Texas Lottery and Kansas Lottery. However, it does not have permission from any government agency in each state of the United States. There are numerologists who believe that a person’s primary number, their birth date, is the most influential number in any person’s life in addition to a secondary number. Finding this number, however, involves much more complex mathematics to determine. You are responsible for any decision made by you based on the information included in this post. The site or the author cannot be held liable for any damage or loss that might result from the use of this website or its content. As a visitor to this site, you are taken to have read and agreed to this disclaimer. ____________________________________________________________

  2. Hi, I just found your website via Bing. Your article is truly applicable to my life right now, and I’m really delighted I found your website.

  3. I admire the time and effort you put into your blog. I wish I had the same drive.

  4. Mazrfdl表示:

    Привет!
    Полезная информация как купить диплом о высшем образовании без рисков
    mans-diplom.ru

  5. Danrwxd表示:

    Здравствуйте!
    Мы изготавливаем дипломы любой профессии.
    toplentanews.ru/nastoyashhie-diplomyi-legalno-i-konfidentsialno
    Рады оказать помощь!.

  6. Most reliable human being messages, nicely toasts. are already provided gradually during the entire wedding celebration and therefore are anticipated to be very laid back, humorous and as well as new all at once. best man speech

  7. LewisTwera表示:

    https://cytotecbestprice.pro/# buy cytotec over the counter

  8. PatrickTig表示:

    http://nolvadexbestprice.pro/# tamoxifen rash pictures

  9. Matthewchact表示:

    cost of generic propecia without dr prescription: buying cheap propecia without dr prescription – buy propecia tablets

  10. RobertSic表示:

    buy cheap propecia online cheap propecia without insurance get propecia no prescription

  11. Lazrruf表示:

    Привет!
    Мы изготавливаем дипломы любых профессий по разумным тарифам.
    newsbig.raidersfanteamshop.com/poleznye-sovety-po-priobreteniu-diploma-v-internete

  12. DominicJaw表示:

    best online pharmacies in mexico: mexico drug stores pharmacies – reputable mexican pharmacies online

  13. PH POP CASINO表示:

    Very good post. I definitely love this site. Keep it up!

  14. Diplomi_gdEa表示:

    Здравствуйте!
    Купить документ университета вы имеете возможность в нашем сервисе.
    diplomyx.com/kupit-diplom-chelyabinsk

  15. Ljcmim表示:

    speman pills – himplasia brand oral fincar

  16. Sazrjhh表示:

    Привет!
    Диплом любой специальности
    argayash.flybb.ru/viewtopic.php?f=9&t=1173

  17. Arnoldten表示:

    mexican pharmaceuticals online purple pharmacy mexico price list mexico pharmacies prescription drugs

  18. Jeffreydog表示:

    Кооператив для военных
    Как пайщики — участники СВО относятся к событиям вокруг «Бест Вей»
    Следственная группа ГСУ питерского главка МВД
    Потребительский кооператив «Бест Вей» оказался затронут уголовным делом, касающимся в основном иностранной инвесткомпании «Гермес», которое сейчас рассматривается Приморским районным судом Санкт-Петербурга. Более двух лет более 3,5 млрд рублей на счетах кооператива почти непрерывно арестованы по ходатайству сначала ГСУ ГУ МВД по Санкт-Петербургу, а затем Прокуратуры Санкт-Петербурга: пайщики не имеют возможности ни приобрести недвижимость, ни вернуть средства.

    По данным совета потребительского кооператива «Бест Вей», в числе его пайщиков, страдающих от блокировки средств, тысячи военнослужащих, в том числе сотни участников СВО, часть из которых успела приобрести квартиру, часть собирает или собрала первоначальный взнос, а часть — планировала вступить в кооператив. «СП» пообщалась с некоторыми из них и их родственниками, чтобы узнать отношение к «Бест Вей» и событиям вокруг кооператива.

    «К кооперативу отношение очень хорошее»

    Александр Голдман на СВО с мая 2022 года как доброволец, три ранения. Пришел на СВО рядовым, сейчас — начальник штаба батальона. Был пайщиком кооператива, сейчас пайщик — его мама.
    «С помощью кооператива в 2019 году приобретена двухкомнатная квартира во Владивостоке, в которой проживает мама, — рассказывает он. — Расплачиваемся за нее, в ближайшие месяцы намерены погасить задолженность перед кооперативом и оформить квартиру в собственность. К кооперативу отношение очень хорошее, полностью его поддерживаю — он дает возможность без больших переплат приобрести недвижимость. К действиям в отношении кооператива отношусь отрицательно, так как „Бест Вей“ — единственная возможность приобрести жилье в рассрочку».

    «Происходящее вокруг кооператива вызывает шок»

    Гвардии рядовой Глушков Иван Васильевич — пайщик кооператива из Челябинской области. Танкист, мобилизованный, проходил службу в 15-й отдельной гвардейской мотострелковой Александрийской бригаде 2-й гвардейской общевойсковой армии ЦВО. Погиб 11 октября 2023 года.
    Рассказывает его вдова Татьяна Неручева:

    «Мы внесли первоначальный паевый взнос и во второй половине 2021 года встали в очередь на приобретение квартиры в Челябинске, когда начались события вокруг кооператива — была заблокирована его возможность приобретать недвижимость и заблокированы его счета. Наша очередь должна была подойти примерно через год. Мы заявили для приобретения небольшую квартиру, но планировали при покупке увеличить ее стоимость до 3 млн и купить двухкомнатную квартиру — с увеличением первоначального паевого взноса: уставом кооператива это позволяется, а затем переехать из Коркино в Челябинск. Сейчас 3 млн хватит только на небольшую квартиру-студию метров 25, то есть мы понесли материальный ущерб из-за блокирования деятельности кооператива, так как лишены были возможности приобрести квартиру, на которую собрали первоначальный паевый взнос. Работа кооператива заблокирована, счета арестованы уже более двух лет. В наследование пая я только вступаю, так как муж очень долго считался пропавшим без вести — долго шла экспертиза, и свидетельство о смерти мы получили только 18 июня этого года».

    Татьяна — юрист: «Как у юриста у меня происходящее вокруг кооператива вызывает шок, и любой непредвзятый юрист вам скажет то же самое». «Кооператив, — подчеркивает она, — абсолютно прозрачен, он полностью соответствует законодательству о кооперации — что и подтверждалось многократно государственными органами и судами. Если бы мы с мужем не были уверены, что все прозрачно и законно, мы бы не вкладывали в него деньги. Мы не подавали заявление о выходе из кооператива. Я, несмотря ни на что, жду счастливого завершения рукотворного кризиса вокруг кооператива. Для меня это еще и память о муже — он продал долю в квартире, которая ему принадлежала, чтобы вложиться в кооператив. Кроме того, мне хочется понять — до какого маразма может дойти ситуация у нас в государстве в плане незаконных действий в отношении организации, которая по тем или иным причинам не понравилась каким-то чиновникам?».

    «Рассчитываю, что ситуация закончится благополучно»

    Сергей Логинов, рядовой, мобилизованный, представлен к награде «Честь и доблесть».

    «Пять лет назад я стал пайщиком кооператива, участвовал в накопительной программе, планировал прибрести однокомнатную квартиру в Самарской области. Уже нужно было подбирать объект недвижимости и вставать в очередь на покупку, как работа кооператива была заблокирована по инициативе правоохранительных органов, и это продолжается уже более двух лет. По-прежнему надеюсь получить квартиру и рассчитываю, что ситуация закончится благополучно. Поддерживаю кооператив».

    «В кооперативе минимум переплат — несопоставимо с ипотекой»

    Егор Ивков, офицер флота, дирижер военного оркестра, пайщик кооператива с 2019 года.
    «Я нахожусь в накопительной программе — планировал покупку квартиры в Санкт-Петербурге. До постановки в очередь на покупку дело не дошло, но сумма внесена серьезная — и на два года все зависло. Есть друзья-военнослужащие, которые также являются пайщиками и тоже накапливали деньги на первоначальный паевый взнос — они, как и я, не могут ни продолжать накапливать, ни получить деньги обратно, потому что счета арестованы. Отношение наше к ситуации, создавшейся вокруг кооператива, крайне негативное».

    «Кооператив поддерживаю, — говорит пайщик. — Моя сестра живет в квартире, приобретенной с помощью „Бест Вей“ — у нее многодетная семья, сейчас кооперативная квартира переходит в ее собственность. Минимум переплат — несопоставимо с ипотекой. Надеюсь, что ситуация с арестом счетов разрешится в ближайшее время».

  19. WayneCoirl表示:

    mexican mail order pharmacies: mexican online pharmacies prescription drugs – buying from online mexican pharmacy

  20. Nelsonbluck表示:

    medication from mexico pharmacy: pharmacies in mexico that ship to usa – buying prescription drugs in mexico

  21. After looking at a number of the articles on your web page, I seriously like your technique of writing a blog. I book-marked it to my bookmark website list and will be checking back in the near future. Please visit my website as well and tell me how you feel.

  22. DominicJaw表示:

    mexico drug stores pharmacies: purple pharmacy mexico price list – mexico drug stores pharmacies

  23. Gucci Handbags Have you investigated adding some videos for your article? It will truly enhance my understanding

  24. Thanks a lot for sharing this with all of us you really realize what you are talking about! Bookmarked. Kindly additionally seek advice from my site =). We will have a link alternate arrangement between us!

  25. stscrap.Kr表示:

    Compensation from companies that are liable could be used
    to pay medical expenses, travel expenses and
    caregiving costs not covered by insurance. Mesothelioma lawsuits also hold asbestos case [stscrap.Kr]-related
    companies accountable for their negligence.

  26. There are some interesting cut-off dates in this article however I don know if I see all of them center to heart. There is some validity but I’ll take hold opinion until I look into it further. Good article , thanks and we would like more! Added to FeedBurner as properly

  27. Arnoldten表示:

    mexican mail order pharmacies mexico pharmacy mexico drug stores pharmacies

  28. Lazrnrj表示:

    Привет, друзья!
    Мы предлагаем дипломы любой профессии по невысоким тарифам.
    newsbizlife.ru/kupit-diplom-vyisokoe-kachestvo-i-nadezhnost

  29. WayneCoirl表示:

    purple pharmacy mexico price list: medicine in mexico pharmacies – mexican pharmaceuticals online

  30. Trefmpu表示:

    Привет, друзья!
    Полезная информация как купить диплом о высшем образовании без рисков
    lampcanvas.com/купить-диплом-о-высшем-образовании-со
    Окажем помощь!.

發佈留言

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