dom4j学习(1) 读取xml

     由于工作中基本上用不到xml的解析 所以对xml的操作也不是很了解,很早就想学习下,但是又比较懒惰,所以也迟迟未写,今天 静下心来学了一下,根据网上的资料自己敲了段代码, 做了一个解析简单xml的例子,麻雀虽小五脏俱全。 做例子中遇到了很多知识盲点吧,上网查资料也找到了原因,都在这里总结下。

 

       是用dom4j来解析xml的 下面说说我遇到的几个问题吧

        1、 什么是Element,什么是Attribute,什么是Node?

         Element简单的说就是XML中的一个 完整的标签,Attribute就是标签中的某些属性,而Attribute所在的位置应该是在<here >,不是在<>not here </>在后者称为值,而Node,说实话我也没有了解的很透彻,网上是这样解释的 ,说NODE是相对TREE这种数据结构而言的。TREE就是由NODE组成,DOM将文档中的所有都看作节点,Element是可以有属性和子节点的node,node包括element、attribute、RootElement、Comment、Namespace、text等。参照下下面的图片。
                           dom4j学习(1) 读取xml
      2getText()与getValue()之间的区别, 首先getValue()这个方法是Attribute拥有的,而Element只有getText(),但同时Attribute也拥有getText()这个方法,正常人类的逻辑思维来说getValue()是要获得如上图attribute中id对应的值的,而getText()是获得name中张三,sex中男这里的值的,巧合的是attribute的getText()与getValue()返回的值相同,我猜想可能是attribute中getText()调用的是getValue()方法吧(瞎说的,没有看源码 )。

 

       再说下dom4j中我用到的几个方法吧:

        Document

              getRootElement()         无参数,返回xml文档的根元素

        Element:

               elements()                      无参数,返回所有该元素的子元素

                attributes()                    无参数,返回该元素下的所有属性   

                getText()                  无参数 ,获取<></>之间的文本,包括空格和回车,当<></>之间存在元素时不返回元素中内容

                getName()              返回元素的名称,即上图中的student,name等

       Attribute

                 getName ()                      返回属性的名称,即上图中的ID;

                 getText(),getValue() 返回属性值。

 

 

     然后就说一说解析xml,其实明白了xml的组成就知道了,解析xml无非就是取到Element和Attribute,最先是要找个入手点,而这个入手点就是rootElement根节点,只要找到根节点再顺藤摸瓜找到attribute和element再调用 getName(),getText(),getValue()就能知道我们想要的值了。

       贴上我写的一小段代码:

 

private void readXML(String xmlPath) throws Exception{
		File xmlFile = new File(xmlPath);
		SAXReader saxReader = new SAXReader();
		Document document = saxReader.read(xmlFile);
		Element rootEle = document.getRootElement();
		
		List<Element> lstElement = rootEle.elements();
		
		for(Element element:lstElement){
			List<Attribute> lstAttr = element.attributes();
			for(Attribute attr :lstAttr){
				System.out.println(attr.getName()+"="+attr.getValue());
			}
			
			List<Element> lstEle = element.elements();
			for(Element attr :lstEle){
				System.out.println(attr.getName()+"="+attr.getText());
			}
		}
	}
 

 

你可能感兴趣的:(dom4j)