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

14,899 Responses

  1. Jamestof表示:

    посмотреть на этом сайте https://xn—–6kcacs9ajdmhcwdcbwwcnbgd13a.xn--p1ai/prajs-list

  2. RichardPaulp表示:

    Следующая страница https://xn—–6kcacs9ajdmhcwdcbwwcnbgd13a.xn--p1ai/

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

  4. RichardPaulp表示:

    кликните сюда https://xn—-jtbjfcbdfr0afji4m.xn--p1ai

  5. Georgeunula表示:

    UsaIndiaPharm: india pharmacy – top 10 online pharmacy in india

  6. Tôi đã giới thiệu bạn bè cùng tham gia chơi trên 78wine.vip

  7. Ищете уникальные товары?, интернет-магазин Camogear. Мы предлагаем разнообразные товары. Убедитесь сами, ознакомиться с новинками. и не пропустите выгодные предложения. в каждом изделии – это то, что мы гарантируем. в нашем интернет-магазине.
    тактичні штани зимові https://camogear.com.ua/ .

  8. DavidSooni表示:

    top 10 online pharmacy in india world pharmacy india USA India Pharm

  9. Ищете уникальные товары?, посетите. Вы найдете у нас много интересного. Убедитесь сами, высшего качества. Станьте частью нашего сообщества. в каждом товаре – это наша цель. в нашем онлайн-магазине.
    купити тактичні штани з наколінниками https://camogear.com.ua/ .

  10. 78wins.asia có giao diện bắt mắt và dễ sử dụng

  11. FrankGlora表示:

    indian pharmacies safe: UsaIndiaPharm – world pharmacy india

  12. Waltonnix表示:

    USA India Pharm: mail order pharmacy india – top 10 online pharmacy in india

  13. MB66表示:

    mb669i.com hỗ trợ nhiều kênh thanh toán tiện lợi

  14. CarltonUnith表示:

    http://usaindiapharm.com/# USA India Pharm

  15. Ищете уникальные товары?, наш сайт Camogear. У нас широкий ассортимент. Убедитесь сами, от лучших брендов. и получайте эксклюзивные предложения. в каждом изделии – это то, что мы гарантируем. Покупайте с удовольствием.
    тактичні куртки https://camogear.com.ua/ .

  16. MB66表示:

    Tôi đã có nhiều trải nghiệm vui vẻ khi chơi trên hotromb.com

  17. FrankGlora表示:

    indian pharmacy paypal: indian pharmacy online – USA India Pharm

  18. Horacesmupe表示:

     Так называемое уголовное дело «Лайф-из-Гуд» – «Гермес» – «Бест Вей» продолжает свою кровавую жатву – в конце марта умер от рака, быстро спрогрессировавшего из-за постоянного стресса, председатель Совета кооператива «Бест Вей», депутат Государственной думы VII созыва Сергей Иванович Крючек. Полтора года назад умерла жена Сергея Крючека – сердце не выдержало после обысков у них дома и допросов мужа.   Суд ни к чему не ведет Следствие действовало максимально жестко. От обысков с пристрастием в 2023 году пострадали сотни пайщиков кооператива по всей России, на скамье подсудимых оказались ни в чем неповинные технические сотрудники – помощник руководителя, один из бухгалтеров, менеджер сайта и конференций, несколько индивидуальных предпринимателей, а также 83-летний отец основателя кооператива «Бест Вей» и бывшего руководителя компании «Лайф-из-гуд» Романа Василенко – пенсионер Виктор Иванович Василенко. Один из допрашивавшихся – Шамиль Фахруллин, умер после допроса от сердечного приступа, в критическом состоянии после 12-часового допроса была Зоя Семенова, которая опровергла в суде свои показания, данные следствию (таких опровергших – десятки). Мама Романа Василенко Лариса Александровна Василенко столкнулась с настоящими пытками – явившись к ней в пять утра, оперативники заставили ее переодеваться при них, раздевшись догола, а в следственном управлении ее на несколько часов посадили на стул со сломанной ножкой и не давали пить. Она потеряла сознание, и только после этого ей удалось выйти из следственного управления. Случаев издевательств и пыток множество. При этом в суде, который идет с конца февраля 2024 года, дело откровенно разваливается – у признанных потерпевшими и свидетелей нет никаких доказательств своих утверждений, они в ходе перекрестных допросов один за другим попадаются на лжи. На последние суды приходят все меньше и меньше свидетелей обвинения – под разными предлогами они отказываются, чтобы не поддерживать лживую версию следствия. Кооператив без вины виноватых Сергей Крючек возглавил крупнейший в России кооператив – 20 тыс. пайщиков во всех регионах страны – весной 2022 года, в период острого кризиса, после только что прошедшего первого обыска в офисе кооператива, в ходе которого были изъяты вся документация, базы данных, серверы, даже личные вещи и трудовые книжки сотрудников (и ничего до сих пор не возвращено: все учетные записи пришлось восстанавливать с нуля). Он и сам стал жертвой обысков в своем подмосковном доме – в ходе которых была изъята и до сих пор не возвращена коллекция наград. Кооператив оказался «в уголовном деле» по странному стечению обстоятельств – он был объявлен следствием организацией, аффилированной с иностранной инвестиционной компанией «Гермес», а значит, призванной ответить по ее обязательствам – хотя кооператив никак не был связан с «Гермесом» ни организационно, ни финансово: имел только общую систему продаж продуктов через маркетинговую фирму «Лайф-из-Гуд». У «Гермеса» возникли проблемы с выплатами российским клиентам после взлома российского сегмента платежной системы системным администратором Евгением Набойченко – система в феврале 2022 года перестала работать, и появилась картинка с предложением обращаться в правоохранительные органы. Только выплаты прекратились не до действий Набойченко, а после них. Параллельно возникла ситуация со СВО и санкциями Запада, крайне затруднившая трансграничные финансовые операции.  Но кооператив «Бест Вей» никаких выплат не прекращал, он зарегистрирован в Санкт-Петербурге, все его активы находятся в России. И даже если учесть требования к нему со стороны лиц, признанных потерпевшими по уголовному делу, то нет никаких причин для блокирования работы кооператива: совокупный ущерб в обвинительном заключении – 282 млн рублей, притом что на счетах кооператива – более 4 млрд рублей. Эта сумма постоянно увеличивается, и еще 600 млн – дебиторская задолженность пайщиков кооперативу на сегодняшний день. 282 млн рублей могли быть заблокированы на счете кооператива, на котором аккумулируются средства из членских взносов, предназначенные для развития, – не было никаких причин блокировать всю деятельность кооператива! Тем не менее это длительное время происходило. Страхи охранителей Что стоит за преследованиями фирмы «Лайф-из-Гуд», успешно работавшей с 2014 до начала 2022 года; компании «Гермес», которая весь этот же период выполняла свои обязательства; кооператива «Бест Вей», к которому вообще нет никаких претензий, кроме как со стороны тех, кого следствие убедило, что раз кооператив незаконный, они смогут взыскать членские взносы и еще со стороны людей, которым кооператив, заботясь о ликвидности, не дал купить объект недвижимости с перепланировкой? Что стоит за поддержкой властью репрессий против кооператива?   Прежде всег, люди, которые пытаются получить контроль над миллиардными активами кооператива и других организаций, а также примкнувшие к ним силовики. Но похоже на то, что власть очень обеспокоил политический потенциал, стоящий за кооперативом, – все эти многотысячные собрания пайщиков на стадионах. Собрания людей, которым ничего не надо от государства – они готовы сами, вскладчину, решать свои жилищные и иные проблемы. Кого-то из охранителей это испугало и стало причиной зеленого света для репрессий против кооператива со стороны высокопоставленных силовиков.  Лжеэксперты и лжеобвинения Кооператив, как и «Гермес», был обвинен в том, что он является финансовой пирамидой. Приглашенный следствием эксперт из СПбГУ Маевский потребовал закрытого заседания – чтобы никто не слышал, как он плавает в теме. Утверждает, что финансирование покупки квартир старым пайщикам происходило за счет новых пайщиков: не понимает, что финансирование кооператива происходит не только за счет новых поступлений от пайщиков, но и за счет возвратных платежей за приобретенную на деньги кооператива недвижимость. А с осени 2021 года – времени внесения в предупредительный список ЦБ, почти исключительно за счет возвратных платежей от пайщиков, которым приобретена квартира. При этом ликвидность кооператива никак не пострадала. Объяснения со стороны адвокатов стали для этого экономиста откровением. Значительная часть пайщиков стремится ускорить погашение долга перед кооперативом, чтобы скорее получить квартиру в собственность – ведь квартира с помощью кооператива приобретается почти без переплат. Переплаты связаны только со вступительным и членскими взносами; налогами, которые платятся по тарифам для юридического лица; оплатой проверки юридической чистоты и независимой оценки недвижимости.  С весны 2022 года кооператив прекратил прием новых пайщиков, при этом на его ликвидности это никак не сказалось: средства на счетах продолжали расти, несмотря на то что многие пайщики боялись платить на арестованные счета и вносят платежи только сейчас.  Спаситель  С весны 2022-го до зимы 2025 года счета кооператива с небольшими перерывами были под арестом – причем запрещались даже выплаты по исполнительным листам пайщикам, которые приняли решение о выходе из кооператива, арестованы были, также с перерывами, квартиры, принадлежащие кооперативу, на 12 млрд рублей.  Под руководством Сергея Ивановича Крючека удалось добиться в судах снятия ареста с квартир, а затем частичного снятия ареста со счетов, разрешения с арестованных сумм выплачивать по исполнительным листам пайщикам, которые через суд добились возврата средств (в этом им активно помогал сам кооператив), а также налоги и заработную плату сотрудникам кооператива. Частичное «освобождение» счетов позволило осуществлять выплаты пайщикам, принявшим решение о выходе из кооператива и возврате своих средств.  Таких пайщиков около 2,5 тыс., общий объем выплат им – порядка 1,5 млрд рублей, значительная часть из них уже получила свои паевые средства – несмотря на огромные трудности с перечислением средств по 115-ФЗ: дело в том, что расследуется еще одно уголовное дело – по ст. 174 УК (хотя кооператив никаких денег за рубеж не переводил), открыто и новое дело по заявлениям потерпевших от «Гермеса», не попавшим в уголовное дело, которое сейчас рассматривается судом. Кроме того, идет гражданский процесс по иску прокуратуры, блокирующему возможность приема новых пайщиков. И, несмотря на эти трудности, кооператив, возглавлявшийся до недавнего времени Сергеем Крючеком, ежедневно осуществляет выплаты выходящим из него пайщикам и успешно восстанавливает деятельность.   Важнейшее достижение Крючека – создание механизма, когда при арестованных счетах пайщики, которым уже приобретены объекты недвижимости, получили возможность погашать свой долг перед кооперативом и переоформлять недвижимость в собственность за счет средств других пайщиков, которые передают им свои арестованные паевые взносы, а взамен получают живые деньги от счастливых приобретателей квартир в собственность. Таким способом пайщикам удалось погасить долг перед кооперативом и полностью перевести недвижимость в собственность по десяткам объектов недвижимости. Кооператив под руководством Сергея Крючека работал над тем, чтобы вновь начать приобретать квартиры пайщикам, которые стоят в очереди на покупку первыми. Тем более что ряд квартир будет освобожден пайщиками, которые отказались возвращать за них деньги и исключены из кооператива с возвратом паевых средств.  Кооператив, по мнению многих пайщиков, жив благодаря той огромной работе, которую проделал Сергей Крючек с весны 2022 года по весну 2025-го, успешному противостоянию произволу правоохранительной системы. Недаром один из пайщиков предложил назвать кооператив именем Сергея Ивановича.

  19. CarltonUnith表示:

    https://usaindiapharm.shop/# top 10 online pharmacy in india

  20. Georgeunula表示:

    online pharmacy india: UsaIndiaPharm – USA India Pharm

  21. phongkhamlongxuyen.com không rõ ràng về các dịch vụ cung cấp

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

  23. Georgeunula表示:

    indianpharmacy com: Online medicine order – UsaIndiaPharm

  24. FrankGlora表示:

    india pharmacy: UsaIndiaPharm – online shopping pharmacy india

  25. sex chịch表示:

    phongkhamlongxuyen.com không rõ ràng về các dịch vụ cung cấp

  26. Waltonnix表示:

    cheapest online pharmacy india: pharmacy website india – UsaIndiaPharm

  27. FrankGlora表示:

    mail order pharmacy india: indian pharmacy – UsaIndiaPharm

  28. vip69.asia có hỗ trợ tiếng Việt đầy đủ và chi tiết

  29. Waltonnix表示:

    USA India Pharm: UsaIndiaPharm – UsaIndiaPharm

發佈回覆給「Waltonnix」的留言 取消回覆

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