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

  1. I really like it when individuals get together and share thoughts. Great website, continue the good work.

  2. Dnrtpql表示:

    Добрый день!
    Купить документ ВУЗа вы имеете возможность в нашей компании в Москве.
    diplomasx24.ru/kupit-diplom-ekaterinbur
    Успешной учебы!

  3. Jeffreydog表示:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  4. Diplomi_sgEa表示:

    Привет!
    Заказать документ о получении высшего образования можно у нас в Москве.
    ast-diplomy.com/kupit-diplom-specialista 

  5. I’m excited to discover this great site. I want to to thank you for your time due to this wonderful read!! I definitely enjoyed every part of it and I have you book-marked to check out new stuff on your site.

  6. Trefqoh表示:

    Привет, друзья!
    Всё, что нужно знать о покупке аттестата о среднем образовании без рисков
    theplaygamepicks.com/диплом-техникума-где-и-как-купить/
    Рады помочь!.

  7. Should Getting Title Loan Be Which Is Used To Pay For Bucket List Adventures?
    아이폰 다바오 (thelastairbender2.com)

  8. John表示:

    Good info. Lucky me I came across your site by chance (stumbleupon). I’ve book marked it for later!

  9. GregoryEstax表示:

    МОСКВА, 7 мая — РИА Новости. Правительство России, возглавляемое Михаилом Мишустиным, уйдет в отставку во вторник.
    Сразу после инаугурации президента Владимира Путина нынешний кабинет министров сложит полномочия перед вступившим в должность главой государства.
    Прогон по комментария

  10. Xazrcyq表示:

    Здравствуйте!
    Официальная покупка аттестата о среднем образовании в Москве и других городах
    arusak-diploms-srednee.ru/diplom-sredne-spetcialnoe-obrazovanie В 

  11. Manrslc表示:

    Привет!
    Заказать документ университета
    diploms-x.com/otzyvy

  12. Who Will Be The Ideal Payday Cash Lender? 다바오 지역 폭발

  13. Danrpen表示:

    Привет!
    Мы изготавливаем дипломы любой профессии.
    http://www.globalcorp.it/куплю-диплом-в-калининграде/
    Рады оказать помощь!.

  14. Dnrthiw表示:

    Добрый день!
    Купить документ института вы можете в нашей компании в Москве.
    diplomasx24.ru/kupit-diplom-moskva
    Удачи!

  15. Dnrtefu表示:

    Добрый день!
    Заказать документ о получении высшего образования вы сможете в нашей компании.
    ast-diploms24.ru/kupit-diplom-magistra
    Успехов в учебе!

  16. Uazrbal表示:

    Привет!
    Где заказать диплом по нужной специальности?
    http://www.marqueze.net/miembros/billyoung/profile/classic/

  17. IWIN表示:

    An impressive share! I’ve just forwarded this onto a friend who has been conducting a little research on this. And he in fact ordered me lunch because I discovered it for him… lol. So allow me to reword this…. Thank YOU for the meal!! But yeah, thanks for spending some time to discuss this subject here on your website.

  18. Tôm Đú表示:

    I would like to thank you for the efforts you have put in writing this website. I am hoping to view the same high-grade blog posts from you later on as well. In truth, your creative writing abilities has inspired me to get my own, personal blog now 😉

  19. 다바오 ktv表示:

    Auto Pawn Loans Vs Loans Off The Bank 다바오 ktv

  20. Diplomi_tlEa表示:

    Привет!
    Заказать документ университета вы можете в нашем сервисе.
    diploms-x.com/kupit-diplom-o-vysshem-obrazovanii 

  21. Everything is very open with a clear description of the challenges. It was truly informative. Your site is extremely helpful. Thanks for sharing!

  22. Mazrgds表示:

    Привет, друзья!
    Всё, что нужно знать о покупке аттестата о среднем образовании без рисков
    http://www.rcmecano.fr/2024/06/30/купили-дипломы-университета/

  23. Excellent blog post. I certainly love this site. Continue the good work!

  24. Lazrpob表示:

    Добрый день!
    Купить диплом ВУЗа.
    cbr.by/club/user/1977/blog/316/

  25. Yrefzhq表示:

    Привет!
    Заказать диплом ВУЗа.
    militarymuster.ca/forum/search.php
    Удачи!

  26. How To Handle With An Expensive Interest Payment Debt 다바오 환전

  27. Mazrvdp表示:

    Привет, друзья!
    Купить диплом магистра оказалось возможно, быстрое обучение и диплом на руки
    mykinotime.ru/vash-diplom-kachestvo-i-autentichnost/

  28. Dnrtfst表示:

    Добрый день!
    Заказать документ института можно в нашей компании.
    ast-diplomas.com/kupit-diplom-ekaterinbur
    Успешной учебы!

發佈留言

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