您好,登錄后才能下訂單哦!
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è)資訊頻道。
免責(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)容。