XML基础之DOM4j解析(二)

前端之家收集整理的这篇文章主要介绍了XML基础之DOM4j解析(二)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

上一篇讲了XML基本规则,现在讲讲XML的解析
1. DOM4J概述
1.1 什么是DOM4J
Dom4j是一个非常优秀的Java XML API,具有性能优异、功能强大和极易使用的特点。现在很多软件采用的Dom4j,例如Hibernate,包括sun公司自己的JAXM也用了Dom4j。
使用Dom4j开发,需下载dom4j相应的jar文件

Dom4j的官方网站:http://sourceforge.net/projects/dom4j/

1.2 搭建Dom4j的开发环境
添加Dom4j的jar包即可:dom4j-1.6.1.jar

使用时注意要导入org.dom4j.*中的类。


2. 使用DOM4J读取XML文件
2.1 读取XML文档的方式

  1. /**
  2. * 获取document
  3. * @return document
  4. */
  5. public static Document GetDocument(){
  6. Document document = null;
  7. //方法一:
  8. //1.读取XML文件,获得document对象
  9. SAXReader saxReader = new SAXReader();
  10. try {
  11. document = saxReader.read(new File("D:\\person.xml"));
  12. } catch (DocumentException e) {
  13. e.printStackTrace();
  14. }
  15. /*//方法二:解析XML形式的文本,得到document对象
  16. String xmlText="<person></person>";
  17. try {
  18. document = DocumentHelper.parseText(xmlText);
  19. } catch (DocumentException e) {
  20. e.printStackTrace();
  21. }*/
  22. return document;
  23. }



2.2遍历所有元素

  1. public static void testRead() throws Exception {
  2. // 读入XML文件,并获取document
  3. Document document = GetDocument();
  4. // 获取根节点
  5. Element element = document.getRootElement();
  6. // 从根节点开始,遍历所有的节点(Element是Node的子接口)
  7. traverse(element);
  8. }
  9.  
  10. // 遍历所有元素的递归方法
  11. public static void traverse(Element element) {
  12. //获取所以元素的迭代器
  13. Iterator<Element> iter = element.elementIterator();
  14. while(iter.hasNext()){
  15. Element e = iter.next();
  16. System.out.println(e);
  17. traverse(e);
  18. }
  19. }
  20.  



2.3 查找元素

  1. /**
  2. * 查找元素
  3. * @param elementName 要查找的元素名称
  4. * @return 返回查找到的元素,null表示没查找到
  5. */
  6. public static Element findElement(String elementName) {
  7. // 读入XML文件,并获取document
  8. Document document = GetDocument();
  9. // 获取根节点
  10. Element rootElement = document.getRootElement();
  11. //用来存储查找到的元素
  12. Element myElement = null;
  13. Iterator<Element> iter = rootElement.elementIterator();
  14. while(iter.hasNext()){
  15. Element ele = iter.next();
  16. //查找到就赋值给myElement
  17. if(ele.getName().equals(elementName)){
  18. myElement = ele;
  19. }
  20. }
  21. return myElement;
  22. }



说明:就可以按照这种方式查找指定特征的元素或是属性


2.4 获取一个元素的信息
2.4.1 基本信息

  1. /**
  2. * 获取元素的基本信息
  3. * @param element表示要获取信息的元素
  4. */
  5. public static void getElementInfo(Element element){
  6. // 获取元素的名称(如果是标签,则是标签名;如果是属性,则是属性名)
  7. String name = element.getName();
  8.  
  9. // 获取元素包含的文本内容(只是指这个标签体中的文本,如果只有子标签,则此值为空字符串)
  10. String text = element.getText();
  11.  
  12. // 获取元素包含的所有文本(标签体中的文本,也包含子孙标签的文本内容
  13. String stringValue = element.getStringValue();
  14.  
  15. // 获取这个元素的XML源码
  16. String xml = element.asXML();
  17.  
  18. }
  19.  


2.4.2 与子元素有关的

  1. /**
  2. * 关于获取子元素
  3. * @param parentElement 父元素
  4. */
  5. public static void childElement(Element parentElement){
  6. // 获取此元素的所包含的所有节点的数量
  7. int nodeCount = parentElement.nodeCount();
  8.  
  9. // 获取此元素所包含的所有子节点的迭代器,包含标签、注释、文本等元素
  10. Iterator<Node> nodeIter = parentElement.nodeIterator();
  11. while(nodeIter.hasNext()){
  12. Node node = nodeIter.next();
  13. System.out.println(node.getName());
  14. }
  15. // 获取此元素的所有子标签的迭代器,只有标签元素,不包含注释与文本元素(迭代器、List集合)
  16. //1.迭代器
  17. Iterator<Element> elementIter = parentElement.elementIterator();
  18. //2.list集合 二选一
  19. List<Element> elementList = parentElement.elements();
  20.  
  21. }
  22.  


2.4.3 与属性有关的


  1. /**
  2. * 获取元素属性
  3. * @param element 元素
  4. */
  5. public static void getAttribute(Element element){
  6. //方法一:
  7. // 获取此元素的属性数量
  8. int attrCount = element.attributeCount();
  9. for(int i=0;i<attrCount;i++){
  10. element.attribute(i);
  11. }
  12. // 获取此元素的所有属性(迭代器、List集合)
  13. //方法二:
  14. Iterator<Attribute> attrIter = element.attributeIterator();
  15. //方法三:
  16. List<Attribute> attrList = element.attributes();
  17.  
  18. }

猜你在找的XML相关文章