溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

java Domj4讀取xml文件的方法

發(fā)布時(shí)間:2020-10-30 12:17:22 來(lái)源:億速云 閱讀:277 作者:小新 欄目:編程語(yǔ)言

java Domj4讀取xml文件的方法?這個(gè)問(wèn)題可能是我們?nèi)粘W(xué)習(xí)或工作經(jīng)常見(jiàn)到的。希望通過(guò)這個(gè)問(wèn)題能讓你收獲頗深。下面是小編給大家?guī)?lái)的參考內(nèi)容,讓我們一起來(lái)看看吧!

獲取節(jié)點(diǎn):

Iterator  Element.nodeIterator();  //獲取當(dāng)前標(biāo)簽節(jié)點(diǎn)下的所有子節(jié)點(diǎn)

獲取 標(biāo)簽:

Element Document.getRootElement();  //獲取xml文檔的根標(biāo)簽

Element  ELement.element("標(biāo)簽名") //指定名稱(chēng)的第一個(gè)子標(biāo)簽

Iterator<Element>Element.elementIterator("標(biāo)簽名");// 指定名稱(chēng)的所有子標(biāo)簽

List<Element>  Element.elements(); //獲取所有子標(biāo)簽

獲取屬性:

String   Element.attributeValue("屬性名") //獲取指定名稱(chēng)的屬性值

Attribute   Element.attribute("屬性名");//獲取指定名稱(chēng)的屬性對(duì)象

Attribute.getName()  //獲取屬性名稱(chēng)

Attibute.getValue()  //獲取屬性值

List<Attribute>     Element.attributes();  //獲取所有屬性對(duì)象.推薦使用方案。

Iterator<Attribute>      Element.attibuteIterator(); //獲取所有屬性對(duì)象

獲取文本:

Element.getText();  //獲取當(dāng)前標(biāo)簽的文本

Element.elementText("標(biāo)簽名")//獲取當(dāng)前標(biāo)簽的指定名稱(chēng)的子標(biāo)簽的文本內(nèi)容

案例:

import java.io.File;
import java.util.Iterator;
import java.util.List;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
import org.junit.Test;

/**
 * 第二個(gè)dom4j讀取xml文件內(nèi)容
 * 節(jié)點(diǎn)
 * 標(biāo)簽
 * 屬性
 * 文本
 * @author APPle
 *
 */
public class Demo2 {
	
	/**
	 * 得到節(jié)點(diǎn)信息
	 */
	@Test
	public void test1() throws Exception{
		//1.讀取xml文檔,返回Document對(duì)象
		SAXReader reader = new SAXReader();
		Document doc = reader.read(new File("./src/contact.xml"));
		
		//2.nodeIterator: 得到當(dāng)前節(jié)點(diǎn)下的所有子節(jié)點(diǎn)對(duì)象(【不包含孫以下的節(jié)點(diǎn)】)
		Iterator<Node> it = doc.nodeIterator();//返回的是一個(gè)迭代器對(duì)象,迭代器里面存放的就是Node,給出泛型為Node
		while(it.hasNext()){//判斷是否有下一個(gè)元素
			Node node = it.next();//取出元素
			String name = node.getName();//得到節(jié)點(diǎn)名稱(chēng)
			//System.out.println(name);
			
			//System.out.println(node.getClass());
			//繼續(xù)取出其下面的子節(jié)點(diǎn)
			//只有【標(biāo)簽節(jié)點(diǎn)】才有子節(jié)點(diǎn)
			//判斷當(dāng)前節(jié)點(diǎn)是否是標(biāo)簽節(jié)點(diǎn)
			if(node instanceof Element){
				Element elem = (Element)node;//node是Node類(lèi)型的,因此要向下轉(zhuǎn)型
				Iterator<Node> it2 = elem.nodeIterator();
				while(it2.hasNext()){
					Node n2 = it2.next();
					System.out.println(n2.getName());
				}
			}
		}
	}
	
	/**
	 * 遍歷xml文檔的所有節(jié)點(diǎn)
	 * @throws Exception
	 */
	@Test
	public void test2() throws Exception{
		//1.讀取xml文檔,返回Document對(duì)象
		SAXReader reader = new SAXReader();
		Document doc = reader.read(new File("./src/contact.xml"));
		
		//得到根標(biāo)簽。contactList
		Element rooElem = doc.getRootElement();
		
		getChildNodes(rooElem);

	}
	
	/**
	 * 獲取 傳入的標(biāo)簽下的所有子節(jié)點(diǎn)。Element elem只有Element標(biāo)簽才有子節(jié)點(diǎn)
	 * @param elem
	 */
	private void getChildNodes(Element elem){
		System.out.println(elem.getName());//獲取到了根標(biāo)簽的名稱(chēng)
		
		//得到子節(jié)點(diǎn)
		Iterator<Node> it = elem.nodeIterator();
		while(it.hasNext()){
			Node node = it.next();
			
			//1.判斷是否是標(biāo)簽節(jié)點(diǎn)
			if(node instanceof Element){
				Element el = (Element)node;
				//遞歸
				getChildNodes(el);
			}
		};
	}
	
	/**
	 * 獲取標(biāo)簽
	 */
	@Test
	public void test3() throws Exception{
		//1.讀取xml文檔,返回Document對(duì)象
		SAXReader reader = new SAXReader();
		Document doc = reader.read(new File("./src/contact.xml"));
		
		//2.得到根標(biāo)簽
		Element  rootElem = doc.getRootElement();
		//得到標(biāo)簽名稱(chēng)
		String name = rootElem.getName();
		System.out.println(name);//contactList
		
		//3.得到當(dāng)前標(biāo)簽下指定名稱(chēng)的【第一個(gè)】【子】標(biāo)簽
		
		/*Element contactElem = rootElem.element("contact");
		System.out.println(contactElem.getName());*/
		
		
		//4.得到當(dāng)前標(biāo)簽下指定名稱(chēng)的所有子標(biāo)簽,指定了contact名稱(chēng),就得到這個(gè)名稱(chēng)的所有同名的標(biāo)簽
		//這里制定了名稱(chēng),有局限性
		/*Iterator<Element> it = rootElem.elementIterator("contact");
		while(it.hasNext()){
			Element elem = it.next();
			System.out.println(elem.getName());
		}*/
		
		
		//5.得到當(dāng)前rootElem標(biāo)簽下的的所有子標(biāo)簽對(duì)象,這里會(huì)拿出所有子標(biāo)簽對(duì)象。推薦使用。
		List<Element> list = rootElem.elements();
		//遍歷List的方法
		//1)傳統(tǒng)for循環(huán)  2)增強(qiáng)for循環(huán) 3)迭代器
		/*for(int i=0;i<list.size();i++){
			Element e = list.get(i);
			System.out.println(e.getName());
		}*/
		
		for(Element e:list){
			System.out.println(e.getName());
		}
		/*
		Iterator<Element> it = list.iterator(); //ctrl+2 松開(kāi) l
		while(it.hasNext()){
			Element elem = it.next();
			System.out.println(elem.getName());
		}*/
		
		//獲取更深層次的標(biāo)簽(方法只能一層層地獲取)
		Element nameElem = doc.getRootElement().
					element("contact").element("name");
		System.out.println(nameElem.getName());
		
	}
	
	/**
	 * 獲取屬性
	 */
	@Test
	public void test4() throws Exception{
		//1.讀取xml文檔,返回Document對(duì)象
		SAXReader reader = new SAXReader();
		Document doc = reader.read(new File("./src/contact.xml"));
		
		//獲取屬性:(先獲得屬性所在的標(biāo)簽對(duì)象,然后才能獲取屬性)
		//1.得到標(biāo)簽對(duì)象
		Element contactElem = doc.getRootElement().element("contact");
		//2.得到屬性
		//2.1  得到指定名稱(chēng)的屬性值
		/*
		String idValue = contactElem.attributeValue("id");
		System.out.println(idValue);
		*/
		
		//2.2 得到指定屬性名稱(chēng)的屬性對(duì)象Attribute
		/*Attribute idAttr = contactElem.attribute("id");
		//getName: 屬性名稱(chēng)    getValue:屬性值
		System.out.println(idAttr.getName() +"=" + idAttr.getValue());*/
		
		//2.3 得到【所有】屬性對(duì)象,返回LIst集合。不需要知道屬性名稱(chēng)和多少個(gè)屬性
		/*List<Attribute> list = contactElem.attributes();//推薦使用方案
		//遍歷屬性
		for (Attribute attr : list) {
			System.out.println(attr.getName()+"="+attr.getValue());
		}*/
		
		//2.4 得到【所有屬性】對(duì)象,返回迭代器
		Iterator<Attribute> it = contactElem.attributeIterator();
		while(it.hasNext()){
			Attribute attr = it.next();
			System.out.println(attr.getName()+"="+attr.getValue());
		}
		
	}
	
	/**
	 * 獲取文本
	 */
	@Test
	public void test5() throws Exception{
		//1.讀取xml文檔,返回Document對(duì)象
		SAXReader reader = new SAXReader();
					
		Document doc = reader.read(new File("./src/contact.xml"));
		
		
		/**
		 * 注意: 空格和換行也是xml的內(nèi)容
		 */
		String content = doc.getRootElement().getText();
		System.out.println(content);
		
		
		//獲取文本(先獲取標(biāo)簽對(duì)象,再獲取標(biāo)簽上的文本)
		Element nameELem = 
			doc.getRootElement().element("contact").element("name");
		//1. 得到文本
		String text = nameELem.getText();
		System.out.println(text);
		
		//2. 得到指定子標(biāo)簽名的文本內(nèi)容
		String text2 = 
			doc.getRootElement().element("contact").elementText("phone");
		System.out.println(text2);
		
	}
	
	
}

感謝各位的閱讀!看完上述內(nèi)容,你們對(duì)java Domj4讀取xml文件的方法大概了解了嗎?希望文章內(nèi)容對(duì)大家有所幫助。如果想了解更多相關(guān)文章內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI