java Domj4读取xml文件

互联网 17-2-16
先概括,再以代码形式给出。

获取节点:

Iterator Element.nodeIterator(); //获取当前标签节点下的所有子节点

获取 标签:

Element Document.getRootElement(); //获取xml文档的根标签

Element ELement.element("标签名") //指定名称的第一个子标签

Iterator<Element>Element.elementIterator("标签名");// 指定名称的所有子标签

List<Element> Element.elements(); //获取所有子标签

获取属性:

String Element.attributeValue("属性名") //获取指定名称的属性值

Attribute Element.attribute("属性名");//获取指定名称的属性对象

Attribute.getName() //获取属性名称

Attibute.getValue() //获取属性值

List<Attribute> Element.attributes(); //获取所有属性对象.推荐使用方案。

Iterator<Attribute> Element.attibuteIterator(); //获取所有属性对象

获取文本:

Element.getText(); //获取当前标签的文本

Element.elementText("标签名")//获取当前标签的指定名称的子标签的文本内容

案例:

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;    /**   * 第二个dom4j读取xml文件内容   * 节点   * 标签   * 属性   * 文本   * @author APPle   *   */  public class Demo2 {  	  	/**  	 * 得到节点信息  	 */  	@Test  	public void test1() throws Exception{  		//1.读取xml文档,返回Document对象  		SAXReader reader = new SAXReader();  		Document doc = reader.read(new File("./src/contact.xml"));  		  		//2.nodeIterator: 得到当前节点下的所有子节点对象(【不包含孙以下的节点】)  		Iterator<Node> it = doc.nodeIterator();//返回的是一个迭代器对象,迭代器里面存放的就是Node,给出泛型为Node  		while(it.hasNext()){//判断是否有下一个元素  			Node node = it.next();//取出元素  			String name = node.getName();//得到节点名称  			//System.out.println(name);  			  			//System.out.println(node.getClass());  			//继续取出其下面的子节点  			//只有【标签节点】才有子节点  			//判断当前节点是否是标签节点  			if(node instanceof Element){  				Element elem = (Element)node;//node是Node类型的,因此要向下转型  				Iterator<Node> it2 = elem.nodeIterator();  				while(it2.hasNext()){  					Node n2 = it2.next();  					System.out.println(n2.getName());  				}  			}  		}  	}  	  	/**  	 * 遍历xml文档的所有节点  	 * @throws Exception  	 */  	@Test  	public void test2() throws Exception{  		//1.读取xml文档,返回Document对象  		SAXReader reader = new SAXReader();  		Document doc = reader.read(new File("./src/contact.xml"));  		  		//得到根标签。contactList  		Element rooElem = doc.getRootElement();  		  		getChildNodes(rooElem);    	}  	  	/**  	 * 获取 传入的标签下的所有子节点。Element elem只有Element标签才有子节点  	 * @param elem  	 */  	private void getChildNodes(Element elem){  		System.out.println(elem.getName());//获取到了根标签的名称  		  		//得到子节点  		Iterator<Node> it = elem.nodeIterator();  		while(it.hasNext()){  			Node node = it.next();  			  			//1.判断是否是标签节点  			if(node instanceof Element){  				Element el = (Element)node;  				//递归  				getChildNodes(el);  			}  		};  	}  	  	/**  	 * 获取标签  	 */  	@Test  	public void test3() throws Exception{  		//1.读取xml文档,返回Document对象  		SAXReader reader = new SAXReader();  		Document doc = reader.read(new File("./src/contact.xml"));  		  		//2.得到根标签  		Element  rootElem = doc.getRootElement();  		//得到标签名称  		String name = rootElem.getName();  		System.out.println(name);//contactList  		  		//3.得到当前标签下指定名称的【第一个】【子】标签  		  		/*Element contactElem = rootElem.element("contact");  		System.out.println(contactElem.getName());*/  		  		  		//4.得到当前标签下指定名称的所有子标签,指定了contact名称,就得到这个名称的所有同名的标签  		//这里制定了名称,有局限性  		/*Iterator<Element> it = rootElem.elementIterator("contact");  		while(it.hasNext()){  			Element elem = it.next();  			System.out.println(elem.getName());  		}*/  		  		  		//5.得到当前rootElem标签下的的所有子标签对象,这里会拿出所有子标签对象。推荐使用。  		List<Element> list = rootElem.elements();  		//遍历List的方法  		//1)传统for循环  2)增强for循环 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 松开 l  		while(it.hasNext()){  			Element elem = it.next();  			System.out.println(elem.getName());  		}*/  		  		//获取更深层次的标签(方法只能一层层地获取)  		Element nameElem = doc.getRootElement().  					element("contact").element("name");  		System.out.println(nameElem.getName());  		  	}  	  	/**  	 * 获取属性  	 */  	@Test  	public void test4() throws Exception{  		//1.读取xml文档,返回Document对象  		SAXReader reader = new SAXReader();  		Document doc = reader.read(new File("./src/contact.xml"));  		  		//获取属性:(先获得属性所在的标签对象,然后才能获取属性)  		//1.得到标签对象  		Element contactElem = doc.getRootElement().element("contact");  		//2.得到属性  		//2.1  得到指定名称的属性值  		/*  		String idValue = contactElem.attributeValue("id");  		System.out.println(idValue);  		*/  		  		//2.2 得到指定属性名称的属性对象Attribute  		/*Attribute idAttr = contactElem.attribute("id");  		//getName: 属性名称    getValue:属性值  		System.out.println(idAttr.getName() +"=" + idAttr.getValue());*/  		  		//2.3 得到【所有】属性对象,返回LIst集合。不需要知道属性名称和多少个属性  		/*List<Attribute> list = contactElem.attributes();//推荐使用方案  		//遍历属性  		for (Attribute attr : list) {  			System.out.println(attr.getName()+"="+attr.getValue());  		}*/  		  		//2.4 得到【所有属性】对象,返回迭代器  		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对象  		SAXReader reader = new SAXReader();  					  		Document doc = reader.read(new File("./src/contact.xml"));  		  		  		/**  		 * 注意: 空格和换行也是xml的内容  		 */  		String content = doc.getRootElement().getText();  		System.out.println(content);  		  		  		//获取文本(先获取标签对象,再获取标签上的文本)  		Element nameELem =   			doc.getRootElement().element("contact").element("name");  		//1. 得到文本  		String text = nameELem.getText();  		System.out.println(text);  		  		//2. 得到指定子标签名的文本内容  		String text2 =   			doc.getRootElement().element("contact").elementText("phone");  		System.out.println(text2);  		  	}  	  	  }

以上就是java Domj4读取xml文件的内容,更多相关内容请关注PHP中文网(www.php.cn)!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:XML解析之JAXP案例详解

相关资讯