• java Domj4读取xml文件


    先概括,再以代码形式给出。

                       获取节点:

                             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);
    		
    	}
    	
    	
    }
    


  • 相关阅读:
    Maven常用命令:
    正向代理、反向代理、透明代理
    linux命令ps aux|grep xxx详解
    Java中Comparable和Comparator区别小结
    Java Queue之PriorityQueue
    java读写分离的实现
    CSS颜色名称和颜色值
    使用Access-Control-Allow-Origin解决跨域
    Tomcat 下启用 https:// 访问
    使用Jedis操作redis
  • 原文地址:https://www.cnblogs.com/wanghang/p/6299751.html
Copyright © 2020-2023  润新知