上一篇讲了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文档的方式
/** * 获取document * @return document */ public static Document GetDocument(){ Document document = null; //方法一: //1.读取XML文件,获得document对象 SAXReader saxReader = new SAXReader(); try { document = saxReader.read(new File("D:\\person.xml")); } catch (DocumentException e) { e.printStackTrace(); } /*//方法二:解析XML形式的文本,得到document对象 String xmlText="<person></person>"; try { document = DocumentHelper.parseText(xmlText); } catch (DocumentException e) { e.printStackTrace(); }*/ return document; }
2.2遍历所有元素
public static void testRead() throws Exception { // 读入XML文件,并获取document Document document = GetDocument(); // 获取根节点 Element element = document.getRootElement(); // 从根节点开始,遍历所有的节点(Element是Node的子接口) traverse(element); } // 遍历所有元素的递归方法 public static void traverse(Element element) { //获取所以元素的迭代器 Iterator<Element> iter = element.elementIterator(); while(iter.hasNext()){ Element e = iter.next(); System.out.println(e); traverse(e); } }
2.3 查找元素
/** * 查找元素 * @param elementName 要查找的元素名称 * @return 返回查找到的元素,null表示没查找到 */ public static Element findElement(String elementName) { // 读入XML文件,并获取document Document document = GetDocument(); // 获取根节点 Element rootElement = document.getRootElement(); //用来存储查找到的元素 Element myElement = null; Iterator<Element> iter = rootElement.elementIterator(); while(iter.hasNext()){ Element ele = iter.next(); //查找到就赋值给myElement if(ele.getName().equals(elementName)){ myElement = ele; } } return myElement; }
说明:就可以按照这种方式查找指定特征的元素或是属性。
2.4 获取一个元素的信息
2.4.1 基本信息
/** * 获取元素的基本信息 * @param element表示要获取信息的元素 */ public static void getElementInfo(Element element){ // 获取元素的名称(如果是标签,则是标签名;如果是属性,则是属性名) String name = element.getName(); // 获取元素包含的文本内容(只是指这个标签体中的文本,如果只有子标签,则此值为空字符串) String text = element.getText(); // 获取元素包含的所有文本(标签体中的文本,也包含子孙标签的文本内容) String stringValue = element.getStringValue(); // 获取这个元素的XML源码 String xml = element.asXML(); }
2.4.2 与子元素有关的
/** * 关于获取子元素 * @param parentElement 父元素 */ public static void childElement(Element parentElement){ // 获取此元素的所包含的所有节点的数量 int nodeCount = parentElement.nodeCount(); // 获取此元素所包含的所有子节点的迭代器,包含标签、注释、文本等元素 Iterator<Node> nodeIter = parentElement.nodeIterator(); while(nodeIter.hasNext()){ Node node = nodeIter.next(); System.out.println(node.getName()); } // 获取此元素的所有子标签的迭代器,只有标签元素,不包含注释与文本元素(迭代器、List集合) //1.迭代器 Iterator<Element> elementIter = parentElement.elementIterator(); //2.list集合 二选一 List<Element> elementList = parentElement.elements(); }
2.4.3 与属性有关的
/** * 获取元素属性 * @param element 元素 */ public static void getAttribute(Element element){ //方法一: // 获取此元素的属性的数量 int attrCount = element.attributeCount(); for(int i=0;i<attrCount;i++){ element.attribute(i); } // 获取此元素的所有属性(迭代器、List集合) //方法二: Iterator<Attribute> attrIter = element.attributeIterator(); //方法三: List<Attribute> attrList = element.attributes(); }原文链接:https://www.f2er.com/xml/300071.html