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

  1. Eanrnom表示:

    Привет, друзья!
    Мы изготавливаем дипломы любых профессий по приятным тарифам.
    telegra.ph/Pokupka-diploma-SHag-v-budushchee-bez-usilij-05-14

  2. WilliamDeeli表示:

    Привет, друзья!
    Мы изготавливаем дипломы.
    forextema.com/index.php?option=com_easyblog&view=entry&id=8914&Itemid=87

  3. Lazrjfj表示:

    Привет!
    Приобрести диплом любого университета.
    freelance.habr.com/freelancers/hnfmrfdtg

  4. Trefcvg表示:

    Привет!
    Официальная покупка диплома вуза с сокращенной программой в Москве
    imperiasport.ru/product/utjazheliteli-2h45-kg-reguliruemye-bstaw20-/reviews
    Окажем помощь!.

  5. This is a great tip especially to those fresh to the blogosphere. Simple but very accurate info… Appreciate your sharing this one. A must read post!

  6. TerryHax表示:

    Беспредел колокольцевской мафии

    Глава МВД и Ко – враги простого народа и участников СВО

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

    Суд по уголовному так называемому делу «Лайф-из-Гуд» – «Гермес» – «Бест Вей» идет с февраля с.г. – в Приморском районном суде Санкт-Петербурга. Параллельно в том же Приморском суде идет начавшийся еще летом прошлого года инициированный Прокуратурой Санкт-Петербурга гражданский процесс о признании кооператива незаконным.

    Выдумки следствия и прокуратуры
    Прокуратура и следственные органы МВД, повинуясь воле неких пока неведомых заказчиков атаки на «Бест Вей», настаивают на том, что устав и деятельность кооператива не соответствуют законодательству – хотя все версии устава кооператива проходили проверку в соответствующих государственных органах, нарушений никаких там не находили и версии устава успешно проходили регистрацию.

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

    Кроме того, сотрудники главка МВД и прокуроры говорят, что кооператив не мог в начале 2021 года из жилищного переименоваться в потребительский, просто согласовав с налоговой инспекцией новый устав – чем расписываются в полнейшем непонимании гражданского законодательства (налоговая, кстати, новый устав согласовала без каких бы то ни было вопросов).

    В законе черным по белому написано, что жилищный кооператив – вид потребительского. То есть ЖК – частный случай потребительского кооператива, и переименование – всего лишь отказ от узкой специализации на приобретение только квартир на вторичном рынке.

    Кооператив работает с 2014 года, его работа десятки раз оценивалась судами по всей России – в частности, по делам о предоставлении материнского капитала в качестве паевого взноса, и всегда оценивалась положительно.

    Никаких проблем в его работе не видела и Прокуратура Санкт-Петербурга – до тех пор, пока в 2021 году на кооператив не поступил заказ неких очень влиятельных людей.

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

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

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

    Больше того, даже незаконное возложение на «Бест Вей» обязанности заплатить 282 млн по обязательствам «Гермеса», как того требует обвинение, не подорвет его ликвидность.

    Всего несколько так называемых потерпевших предъявляют к кооперативу претензии – и все эти претензии незаконны:

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

    –либо требования о возврате паевых взносов пришлись на период, когда счета кооператива уже были арестованы и, соответственно, выплата не произошла из-за того, что ее не санкционировали правоохранительные органы, по ходатайству которых произошел арест;

    –либо «потерпевший» претендует на вступительный и членские взносы, которые по договору с кооперативом не подлежат возврату при выходе из кооператива, так как идут на развитие «Бест Вей».

    Воровство «по закону»
    Представители прокуратуры в рамках процесса о законности кооператива в Приморском суде заявляли на словах, что не подвергают сомнению ранее заключенные договоры и, следовательно, приобретение квартир (при этом документально это не закрепляли).

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

    Кооператив со своей стороны еще весной 2022 года постановил прекратить прием новых пайщиков на период, пока ведется следствие и дело, затрагивающее «Бест Вей», рассматривается в уголовном суде. В подкрепление этой позиции «Бест Вей» в этом году сам ходатайствовал перед судом об издании судебного приказа о запрете приема новых пайщиков и заключения новых договоров паенакопления на период рассмотрения уголовного дела.

    Законность работы кооператива исследует уголовный суд. Учитывая это, а также добровольное самоограничение кооператива, тема признания «Бест Вей» незаконным в гражданском суде вроде бы должна быть исчерпана? Кооператив обслуживает старые договоры, новых уже более двух лет не заключает и не будет заключать до конца уголовного суда – в результате которого претензии к нему скорее всего будут сняты.

    Но нет, прокуратура и ГУ МВД по Санкт-Петербургу под руководством Плугина, его ГСУ под руководством Негрозова не унимаются – они требуют признать кооператив незаконным «в вакууме», абстрактно. Для чего?

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

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

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

    Это сотни участников СВО – которые защищают Родину на фронте. Они возмущены тем, что в тылу с их деньгами, которые уже более двух лет заблокированы на арестованных счетах кооператива, так называемые правоохранители творят беспредел.

    Все пайщики возмущены тем, что в тюрьме более чем на два года оказались заперты технические сотрудники и простые пайщики кооператива, которых следствие попыталось объявить организаторами пирамиды.

    Пайщики убеждены: липовое дело колокольцевской мафии против кооператива суд должен переквалифицировать в дело против следователей, оперативников и обвинителей, состряпавших заказуху в интересах криминальных бонз и для личного обогащения. Все заказчики этого коррупционного и подрывающего социальный мир в стране дела должны оказаться на скамье подсудимых и сесть надолго!

  7. sifilckhb表示:

    Looking for Denver Nuggets vs. Los Angeles Lakers free NBA picks & NBA odds? NBA betting sees the Nuggets taking on the Lakers on Saturday, May 20th, 2023 at Crypto Arena. Cappers Picks provides complimentary expert handicapping picks on all NBA basketball matchups so stay tuned… The Crimson Tide and the Bluejays have firepower scattered throughout their lineup, and they still couldn’t find ways to beat this Aztecs defense. And while Florida Atlantic definitely has some talent, the Owls don’t have high-major studs. Of course, that doesn’t seem all that important right now, especially with FAU having made a remarkable run already. But that type of thing matters this late in the tournament. The best NBA picks can be found on our NBA picks page. We deeply analyze every game, allowing us to come up with NBA picks that are more likely to win you some money.
    https://minecraftcommand.science/forum/discussion/topics/todays-match-predictions-correct-score
    If you’re looking for a social casino that legally replicates the experience of playing at a real money casino, then Betrivers.net could be ideal. They position themselves as the ultimate way of enjoying games with no need for a deposit. BetRivers is licensed and regulated by the Michigan Gaming Control Board and operates in partnership with the Little River Casino Resort in Manistee, Michigan. In addition to sports betting, BetRivers also offers a variety of casino games, including slots, table games, and live dealer games. To use BetRivers in Michigan, players must be at least 21 years old and physically located within the state’s borders. On the back end, BetRivers Colorado has developed an excellent software that guarantees a seamless and easily navigated betting experience for new and veteran sports bettors alike. In the rest of this article, we’ll take a look at some of the top features that make BetRivers stand out, and dive in to learn more about how BetRivers works and what you can expect as a BetRivers user. 

  8. MichaelBaste表示:

    https://sportclan.ru/bonusy/promokod-1xbet-1hbet/ – Детская порнография

  9. Lazrmxa表示:

    Привет!
    Мы изготавливаем дипломы психологов, юристов, экономистов и любых других профессий по доступным тарифам.
    telegra.ph/vuzy-s-distancionnym-obucheniem-v-moskve-08-02

  10. Yrefhiz表示:

    Здравствуйте!
    Заказать диплом любого ВУЗа.
    1c-kazakhstan.blogspot.com/2017/02/1

  11. Mazrqre表示:

    Привет!
    Как официально купить аттестат 11 класса с упрощенным обучением в Москве
    my-pitomec.ru/category/sovet/

  12. Diplomi_hrEa表示:

    Добрый день!
    Заказать документ института можно в нашей компании в Москве.
    vadaszapro.eu/user/profile/1275773

  13. JasonDuece表示:

    Fafabet South Africa
    fafabet only sports betting
    Step into the thrilling universe of Fafabet’s casino, a place pulsating with excitement and brimming with opportunities for big wins! Whether you’re a seasoned gambler or a curious newcomer, this review will guide you through the vibrant selection of top-tier games, enticing bonuses, effective strategies, and seamless mobile play. Get ready to transform your gaming experience and discover why Fafabet is the go-to destination for online casino enthusiasts!
    Best Casino Games at Fafabet
    brings the excitement of a real casino directly to your screen, featuring a curated selection of games that cater to both new and seasoned players. The focus on popular games such as roulette, blackjack, and poker ensures a varied and engaging experience, providing options for strategic play, quick wins, and everything in between. This selection is not just about variety; it’s tailored to enhance player engagement and retention. The inclusion of games with different levels of complexity and reward strategies meets the diverse needs and preferences of the global online gambling community, making Fafabet a top choice for live casino enthusiasts.

    Choose Your Game: Online Roulette, Blackjack, Poker
    The heart of Fafabet’s live casino lies in its comprehensive offering of classic games, which are among the most popular and enduring in the gambling world. Let’s focus on the star of the casino floor: Roulette. This game not only attracts players with its simplicity and elegance but also offers various versions to suit different tastes and betting styles.

  14. covid19表示:

    Spot on with this write-up, I seriously believe this website needs much more attention. I’ll probably be returning to see more, thanks for the advice.

  15. Dnrthwf表示:

    Привет, друзья!
    Приобрести документ о получении высшего образования можно в нашем сервисе.
    forumrabota.0pk.me/viewtopic.php?id=7320#p16792

  16. Your style is unique compared to other folks I’ve read stuff from. Thank you for posting when you’ve got the opportunity, Guess I’ll just bookmark this page.

  17. The Reasons Seat Leon Key Replacement Is Fast Increasing To Be
    The Most Popular Trend In 2023 car key maker Near me

  18. Treffop表示:

    Привет, друзья!
    Приобретение диплома ПТУ с сокращенной программой обучения в Москве
    dobrinka-dosaaf.ru/articles/578-mailsco-online-u978j
    Рады помочь!.

  19. Why No One Cares About Replacement Lock For Upvc Door replacement panels For upvc Doors

  20. K8表示:

    I’m impressed, I have to admit. Rarely do I encounter a blog that’s both equally educative and engaging, and let me tell you, you have hit the nail on the head. The problem is something that too few folks are speaking intelligently about. I am very happy I came across this during my search for something regarding this.

  21. DouglasGed表示:

    best india pharmacy: Online India pharmacy – pharmacy website india

  22. Vauxhall Corsa Replacement Key Isn’t As Difficult As You Think vauxhall key fob

  23. onbet表示:

    Nice post. I learn something totally new and challenging on websites I stumbleupon on a daily basis. It’s always useful to read articles from other authors and practice something from other web sites.

  24. Lrjnyd表示:

    lactulose order online – betahistine canada generic betahistine 16mg

  25. Lazrcom表示:

    Привет!
    Мы изготавливаем дипломы любой профессии по выгодным тарифам.
    telegra.ph/dokumenty-na-postuplenie-v-vuz-kazahstan-08-02

  26. Mazrvql表示:

    Добрый день!
    Реально ли приобрести диплом стоматолога? Основные шаги
    diplomrushkan.ru

  27. Yrefdlo表示:

    Привет!
    Заказать диплом о высшем образовании.
    frichinvestigation.org/node/4760

  28. DouglasGed表示:

    buy prescription drugs from india: Indian pharmacy international shipping – pharmacy website india

  29. StephenDeery表示:

    Remarkable things here. I’m very satisfied to peer your article. Thank you a lot and I’m taking a look forward to touch you. Will you kindly drop me a mail?
    регистрация Twin Casino

  30. Sazrzcx表示:

    Здравствуйте!
    Мы готовы предложить дипломы любой профессии.
    Приобретение диплома, который подтверждает окончание университета, – это выгодное решение.
    dog-ola.ru/topic7479?view=next
    Рады помочь!.

發佈留言

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