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

  1. Edwarddig表示:

    Pin-Up Casino: Pin Up Kazino ?Onlayn – pin-up 141 casino

  2. Edwarddig表示:

    Pin Up: Pin-Up Casino – pin-up kazino

  3. Dzięki za szczegółowy przewodnik po tym, czego można oczekiwać podczas wdrażania SEO.

  4. RobertSax表示:

    https://autolux-azerbaijan.com/# Pin Up Azerbaycan ?Onlayn Kazino

  5. RobertSax表示:

    https://autolux-azerbaijan.com/# Pin up 306 casino

  6. RobertSax表示:

    https://autolux-azerbaijan.com/# Pin Up Azerbaycan ?Onlayn Kazino

  7. Ten post był dla mnie oświeceniem na temat zagrożeń SEO. Dzięki!

  8. Edwarddig表示:

    Pin Up Kazino ?Onlayn: Pin-Up Casino – Pin-Up Casino

  9. Edwarddig表示:

    Pin-Up Casino: pin-up 141 casino – pin-up kazino

  10. Edwarddig表示:

    Pin Up Kazino ?Onlayn: Pin up 306 casino – pin-up kazino

  11. arlennizo.top表示:

    7 Simple Strategies To Completely Rocking Your Boot Scooter arlennizo.top

  12. Dzięki za szczegółowy przewodnik po tym, czego można oczekiwać podczas wdrażania SEO.

  13. Dzięki za podkreślenie znaczenia profesjonalnego podejścia do SEO.

  14. Timsothyabela表示:

    Its like you read my mind! You appear to know a lot about this, like you wrote the book in it or something. I think that you can do with some pics to drive the message home a bit, but instead of that, this is excellent blog. A great read. I will definitely be back.

    jingji.8193.tw/product/product.php?id=162&page= 
    radio-wave.ru/forum/member.php?2068-robertgLiept 
    arzhaniki.ru/memberlist.php?start=175&sk=a&sd=d&first_char=r 
    jayaramcards.com/Home/buynow/97 
    talkrealty.ru/page/3 

  15. Cieszę się, że znalazłem ten blog przed rozpoczęciem mojego projektu SEO.

  16. Diplom_wdEa表示:

    купить диплом в старом осколе diplomvash.ru .

  17. Michaelzem表示:

    «Рэмбович» против колокольцевской мафии
    Министр обороны, в рамках начавшейся антикоррупционной кампании, готов инициировать расследование против команды своего коллеги Колокольцева: сфабрикованное ею дело в отношении кооператива «Бест Вей» ­– созданного военнослужащими во многом для военнослужащих, бьет в тылу по тем, кто защищает страну на фронте, лишая их квартир и денег, которые уже более двух лет арестованы ГСУ ГУ МВД России по Санкт-Петербургу и Ленинградской области и примкнувшей к ним Прокуратурой Санкт-Петербурга.
    Социальная программа для участников СВО
    ?Кооператив «Бест Вей» создан в 2014 году российскими военнослужащими – как ушедшими в запас, так и действующими. Его предправления до весны 2021 года, а затем еще год председатель совета – капитан третьего ранга запаса Роман Василенко, в правлении кооператива всегда было немало офицеров Вооруженных сил РФ.

    Нынешний председатель совета Сергей Крючек – полковник запаса, депутат Государственной думы VII созыва.
    Жилье для военнослужащих
    Кооператив начинался во многом как проект обеспечения жильем военнослужащих, бывших военнослужащих и членов их семей. Он существует 10 лет, за восемь лет, пока он имел возможность приобретать квартиры для пайщиков, которые были заблокированы следствием, «Бест Вей» купил 2500 квартир, более 250 квартир перешли в собственность пайщиков.

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

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

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

    Однако деньги «Гермеса» из-за границы достать проблематично – и следствие решило объявить кооператив частью некоего холдинга, в который входил также «Гермес», и на этом основании забрать его средства. Хотя в действительности между этими организациями никогда не было никаких финансовых и организационных отношений.

    Продукты кооператива и продукты «Гермеса» продвигала сеть предпринимателей под эгидой компании «Лайф-из-Гуд» – коммерческая сеть, каждый из участников которой работал за процент и мог продавать все, что угодно. Многие приходили в кооператив не через продажников, а по сарафанному радио.

    На скамье подсудимых – десять человек, в том числе 83-летний Виктор Иванович Василенко, отец Романа Василенко, ветеран Вооруженных сил: команда Колокольцева не отказала себе в извращенном удовольствии поиздеваться над ветераном.
    Тыловые крысы воруют чужое имущество
    Колокольцевцы – тыловые крысы, которые никогда не были настоящими офицерами, скорее чинушами с коррупционными интересами, пытаются отжать почти 4 млрд рублей на счетах кооператива для себя и своих подельников.
    Притом, что в рамках уголовного дела фигурирует сумма в 282 млн рублей, даже (незаконный) арест средств кооператива на эту сумму никак не повлиял бы на работу кооператива. Но арестованы именно 4 млрд, при этом МВД не дает платить с этих средств налоги и зарплату. То есть целью продажных ментов являются именно миллиарды кооператива, а не удовлетворение (в основном липовых) претензий клиентов «Гермеса».
    Комиссар Путина
    Андрей Белоусов, облеченный особым доверием главы государства, имеет карт-бланш на проведение антикоррупционных расследований в отношении всех силовых структур, тем более затрагивающих военнослужащих Вооруженных сил. Новый министр обороны сразу объявил социальную защищенность воинов высшим приоритетом, а кооперативная программа обеспечения жильем может сыграть в ней огромную роль.

    «Рэмбович» уже показал, как бескомпромиссно он борется с коррупционерами в руководстве МО и в ОПК. Теперь настал черед руководства МВД – которое давно уже на плохом счету президента Путина, просто до него в условиях войны не доходили руки. Теперь они дошли.

  18. erb's Palsy表示:

    You’ll Never Be Able To Figure Out This Erb’s Palsy
    Settlement’s Benefits erb’s Palsy

  19. Ismaelfer表示:

    Amazing issues here. I am very satisfied to look your article. Thanks a lot and I am having a look ahead to contact you. Will you please drop me a e-mail?

    1001cruise.ru/carnival-cruises/114-news/762-liner-royal-princess-will-be-released-in-the-first-flight.html 
    igramlikes.com/contact/ 
    himchistka.udm.ru/forum?%2Fforum=&%2Fforum%2F=&GuestbookItem_page=11 
    rus-flagman.ru/service.php 
    taxizevs.ru/about/ 

  20. Diplom_qiEa表示:

    купить диплом в ачинске купить диплом в ачинске .

  21. Dzięki za praktyczne porady dotyczące radzenia sobie z SEO.

  22. Your Family Will Be Grateful For Getting This Natural Remedies For Anxiety Disorder anxiety Disorders Questionnaire

  23. Ten Birth Defect Case Myths You Shouldn’t Post On Twitter
    Birth Defect Lawsuits

  24. Dzięki za świetne porady na temat SEO. Bezpieczeństwo jest kluczowe!

  25. I find this article on google and found your site. .Thanks for sharing good article. I will visit your site.

  26. Bardzo przydatny artykuł o SEO. Planuję zastosować te wskazówki na mojej stronie.

發佈留言

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