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

  1. Jose表示:

    11 Ways To Destroy Your Unique Slots legitimate
    slots – Jose

  2. From All Over The Web Twenty Amazing Infographics About European Single Mattresses bunk bed Mattress single

  3. 5 Killer Quora Answers To Shopping Online Uk Clothes Shopping Online uk clothes

  4. A Good Rant About Adhd Assessments For Adults adhd in adults self assessment

  5. The No. One Question That Everyone Working In Cheap Couches For Sale Needs To Know How
    To Answer sleeper sofas for sale (chvojkova.Blog.Idnes.cz)

  6. Guide To Car Boot Scooter: The Intermediate Guide The Steps To Car Boot
    Scooter car Boot Scooter

  7. How To Outsmart Your Boss In Drip Coffee Pot filter coffee maker uk

  8. You’ll Never Be Able To Figure Out This Coffee Machine
    From Beans’s Benefits coffee machine from beans (o39akk533b75wnga.kr)

  9. 10 Facts About Folding Mobility Scooters Near Me That Will
    Instantly Make You Feel Good Mood mobility scooters lightweight Foldable

  10. Ten Espresso Coffee Makers That Really Improve Your Life
    Espresso coffee Makers

  11. Three Reasons To Identify Why Your GSA SERp Isn’t
    Working (And How To Fix It) get gsa Ser list

  12. Ten Things You Learned About Kindergarden That Will Aid
    You In Obtaining Double Glazing Window Locks Repairs http://www.jerealas.top

  13. The Advanced Guide To Semi Truck Lawsuits Semi Truck Accident Lawsuit

  14. Eula表示:

    Think You’re The Perfect Candidate For Doing Modern Slots?

    Do This Test slot machine features (Eula)

  15. This Week’s Top Stories About Leather U Shape Sectional Leather U Shape Sectional leather sectional U Shaped

  16. Window Repairs Near Me Tools To Improve Your Everyday Lifethe Only Window Repairs Near
    Me Trick That Every Person Should Be Able To window repairs Near me

  17. RalphLop表示:

    “Дело “Лайф-из-Гуд” — “Гермес” — “Бест Вей”: свидетель обвинения объявила себя потерпевшей от следствия
    Роман Викторович Василенко
    6 и 13 июня Приморский районный суд города Санкт-Петербурга, рассматривающий по существу уголовное дело № 1-504/24, связываемое с компаниями “Лайф-из-Гуд”, “Гермес” и кооперативом “Бест Вей”, провел очередные, шестое и седьмое по счету, заседания, посвященные допросу свидетелей обвинения и лиц, признанных следствием потерпевшими в рамках судебного следствия по делу
    “К кооперативу претензий не было, следователь предложил подать заявление”
    Признанный следствием потерпевший Болян подсудимых не знает. Был клиентом “Гермеса”, а также пайщиком кооператива — но до 2019 года. В 2019-м он вышел из кооператива и из “Гермеса”, ему были возвращены паевые взносы, и никаких претензий к кооперативу у него не было — что он письменно подтвердил, расторгая договоры с этими организациями.

    Однако, как Болян отметил на суде, следователь убедил его в том, что он — потерпевший и должен подать заявление на возврат членских взносов. Заявление в МВД писать не хотел, на него вышли сотрудники, сначала претензий к кооперативу не было. Полиция ему объяснила, что можно получить деньги.

    Стал клиентом “Гермеса” и пайщиком кооператива через своего консультанта Алексея Виноградова. Виноградов — грамотный маркетолог, он ему верил, тот не работал в кооперативе. Что было предметом договора в “Гермесе”, не помнит. В “Гермес” внес 100 и 700 евро, а в кооператив каждый месяц вносил по 12 тыс. в течение семи месяцев.

    Вышел и из кооператива, и из “Гермеса” в 2019 году. Зачем вступал? “Наверное, квартиру купить хотел”. Кооператив вернул ему 70 тыс. паевых взносов, “Гермес” вернул со счета “Виста” 140 тыс. рублей.

    В кооперативе деньги вернули почти сразу, удержав вступительный и членские взносы; в “Гермесе” вернули позже через “внутрянку”, но удержали комиссию.

    Утверждает, что ему говорили, что можно со счета “Виста” вносить деньги в кооператив. Объясняли, что деньги передаются в доверительное управление трейдерам и брокерам, которые играют на бирже. В кооперативе, как он утверждает, можно было купить место в очереди. По его словам, “Гермес” и кооператив — по сути, одна организация. Требует взыскать с кооператива более 148 тыс. рублей — вступительный и членские взносы, и более 60 тыс. рублей с “Гермеса” — комиссию при выводе средств.

    Договор с кооперативом не читал, но ему объяснили, что есть невозвратная часть денег — ее и не вернули, “но хочу попытаться вернуть”. Претензий к кооперативу “как бы и нет, но если вернут взносы, то будет хорошо”.

    К Виноградову претензий не предъявлял. “Может, меня и не обманули в кооперативе”, -резюмировал свое выступление в суде Болян.
    “Требую выплатить с учетом роста цен на недвижимость”
    Признанная следствием потерпевшей Комова была как клиентом “Гермеса”, так и пайщиком кооператива. Подсудимых не знает. Требует более 8800 тыс. с кооператива и более 2700 тыс. с “Гермеса”. При этом из кооператива она не вышла и заявление о выходе не подавала. Сумма требований к кооперативу включает как паевые и членские взносы, так и оценку роста цен на недвижимость, которая не была приобретена.

    Утверждает, что можно переводить деньги со счета “Виста” напрямую в кооператив — в подтверждение приводит скрины переписки с консультантами в смартфоне. Суд разъясняет, что доказательство может быть приобщено позднее при надлежащем оформлении.

    “Информацию воспринял скептически, но вступил”
    Признанный следствием потерпевшим Киреев был только клиентом “Гермеса”. Подсудимых не знает лично — Измайлова видел в видеоролике “Лайф-из-Гуд”. Узнал о “Гермесе” от консультантов Татьяны и Андрея Клейменовых, с которыми знаком с конца 1990-х годов. Вступил в “Гермес” в 2020 году, деньги сразу отобразились на счете. Вносил средства на счет “Виста” небольшими частями, снимал средства со счета для личных нужд. Заявляет требования на более чем 2 млн 300 тыс. рублей.

    Когда подписывал договор, в офисе была табличка кооператива, но в офисе находился представитель фирмы “Гермес”, ему сказали, что это два продукта компании “Лайф-из-Гуд”.

    В 2022 году начались проблемы с выводом средств. И руководство фирмы пугало блокировкой счета в случае подачи заявления в правоохранительные органы. В хейтерском чате узнал телефон следователя Сапетовой, позвонил и подал заявление.

    В чате клиентов компании “Гермес” была информация о том, что счет будет заблокирован в случае подачи заявления в правоохранительные органы. Эта информация была за подписью “администрация”. Он спросил у консультантов: “Кто это — администрация?”, написал вопрос в чате, и его забанили. Других попыток вступать в диалог с “Гермесом” не предпринимал.

    Признанный следствием потерпевшим Чернышенко был также только клиентом только компании “Гермес”. Подсудимых не знает. Познакомился с консультантами “Гермеса” во время совместной работы в “Макдоналдсе”. Информацию о “Гермесе” воспринял скептически — “это какой-то обман”, но консультанты его в конце концов уговорили. Они поставили условие, что продадут ему земельный участок, чтобы он вступил в “Гермес”.

    “Я хотел их обмануть, — пояснил свидетель, — думал: пусть они продадут, а я в “Гермес” не вступлю. Но они начали уговаривать, и я вступил в апреле 2020 года. Один из консультантов дал расписку на внесение денег на счет в “Гермесе”, я внес через него 230 тыс. И еще раз из жадности 140 тыс. 140 тыс. я вывел, плюс каждый месяц выводил по 5000–7000 руб. С какого-то момента проценты стали падать. В конце я захотел выйти — но не успел. У меня в “Гермесе” осталось 270 тыс., которые я требую вернуть”.

    В январе 2023 года Чернышенко подал заявление в полицию, так как прекратился доступ к счету. “Мне предложили 70 тыс. вернуть, чтобы я не ходил в полицию, ссылаясь на то, что помогли мне продать участок за меньшую сумму по документам, чем я его продал на самом деле, но я отказался, сказал, что мне надо 270 тыс.”.

    “Я хочу стать потерпевшей. Но Василенко многие благодарны за квартиры”
    Свидетель обвинения Галашенкова была только клиентом “Гермеса”. Из подсудимых знает Виктора Ивановича Василенко. Она сидела в зале при допросе двух потерпевших (что запрещено), но заявила, что плохо слышит. Ранее была знакома с Верой Исаевой из компании “Лайф-из-Гуд”.

    Вера узнала, что у нее есть офис, и познакомила с Романом Василенко, который снял у нее офис, когда “Лайф-из-Гуд” только начинала раскручиваться. Он снимал офис только за коммунальные платежи. “Я попросила расплатиться за четыре месяца, а он предложил мне вместо денег вступить в “Бест Вей”, но я отказалась, так как квартира не была нужна”. Зато стала клиентом “Гермеса”: “Внесла 15 тыс. евро, но через три месяца на счете оказалось 3400 евро!” Исаева, по словам Галашенковой, оказалась мошенницей.

    По словам Галашенковой, она внесла на счет “Виста” более 3 млн рублей. “Когда сказали, что все счета заблокировали, то собрали с нас еще денег, чтобы счета разблокировать, потом пришло сообщение, что открывается новая фирма, но это все оказалось обманом — счета не разблокированы”.

    “Я не считала себя потерпевшей, так как не знала, что это можно сделать, — заявила Галашенкова. — Сейчас желаю заявить, что я хочу стать потерпевшей. Считаю, что должна взыскать с “Гермеса” как прямой ущерб, так и упущенную выгоду, так как эта фирма закрылась”.

    При этом заявила, что “Василенко молодец, потому что я видела людей, которые купили квартиры, они были ему очень благодарны”.

  18. It is essential for an attorney to know how to recognize Asbestos claim-related products in each case.
    This can be done through talking to co-workers, getting reports, or looking at samples from homes or workplaces.

  19. jonbian.co表示:

    How Window Repair Near Is A Secret Life Secret Life Of Window Repair Near
    upvc window repair near me; jonbian.co,

  20. 10 Startups That’ll Change The Double Glazing Near Me Industry For
    The Better double glazing company near me

  21. bunk Beds uk表示:

    Are You Tired Of Kids Treehouse Bunk Bed? 10 Inspirational Sources To Revive Your Passion bunk Beds uk

  22. Laurel表示:

    Five Kids Bunk Bed Projects To Use For Any Budget kids bunk beds (Laurel)

  23. Five Killer Quora Answers On Shopping Online Sites List Shopping Online Sites List

  24. Five Laws That Will Aid With The Counter Strike Pc Industry Cs2 Case Opening

  25. You’ve presented a balanced view on this issue.에볼루션 시간차 배팅

  26. Augustine thanks for sharing this! My extensive google search has now been recently paid for using quality insight to talk about together with our relatives.

  27. A Brief History Of The Evolution Of Railroad Injuries Litigation Railroad Injuries Law Firm

發佈留言

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