Dom4j解析XML应用总结

来源:互联网 发布:循环冗余检查 数据丢失 编辑:程序博客网 时间:2024/03/29 09:42
一.最常用到的API 
  1.getRootElement():隶属于Document类,返回XML文档的根元素 
     setRootElement(Element rootElement) :设置给定元素为相应文档的根元素 
  2.asXML():隶属于Node类,用于将XML转换为String 
  3.DocumentHelper类常用API: 
      createDocument():创建一个Document对象 
       parseText(String text):解析给定Xml的文本,生成Document对象。 
 3.Element类中常用到API 
     attributeValue(String name) :获取元素String值。 
      elementIterator() :返回元素的所有子元素的Iterator迭代器。 
      elements() :返回元素包含所有子元素List。 
      getParent() :获取父元素Element。 
      getPath() :获取自己的xpath。 
      detach() :移除自己。 
      getName() :获取节点的名称。 
      selectNodes(String xpathExpression) :通过XPATH获取节点。 
      selectSingleNode(String xpathExpression) :通过XPATH获取一个节点。 

      getDocument() :作为一个Document返回。 

二. 具体例子  
1.XML文件内容: 

<?xml version="1.0" encoding="utf-8"?><students>    <student id="1" sex="female">        <name>zhangsan</name>        <age>21</age>        <address>            <add code="home">zhengzhou</add>            <add code="company">HIST</add>        </address>    </student>    <student id="2" sex="male">        <name>wangwu</name>        <age>16</age>        <address>            <add code="home">beijing</add>            <add code="company">dongzhi</add>        </address>    </student></students>

  2.测试代码: 

public class ParseXmlExample {    public void parseXmlDoc(String xmlFile){        SAXReader saxReader=new SAXReader();        Document doc=null;        try {            doc=saxReader.read(ParseXmlExample.class.getResourceAsStream(xmlFile));        } catch (DocumentException e) {            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.        }        Element rootElement=doc.getRootElement();        for(Iterator iterator=rootElement.elementIterator();iterator.hasNext();){            Element e_stu=(Element)iterator.next();            String student=e_stu.getName();            String id=e_stu.attributeValue("id");            String sex=e_stu.attributeValue("sex");            String name=e_stu.element("name").getText();            Element address=e_stu.element("address");            StringBuilder sb=new StringBuilder();            sb.append(student+"\n");            sb.append("\t"+"id:"+id+"\t"+"sex:"+sex+"\n");            sb.append("\t"+"name:"+name+"\n");            sb.append("\t"+address.getName()+"\n");            for(Iterator ad=address.elementIterator();ad.hasNext();){                Element e_com=(Element)ad.next();                String code=e_com.attributeValue("code");                String value=e_com.getText();                sb.append("\t\t"+code+":"+value+"\n");            }            System.out.println(sb.toString());        }    }    public static void main(String[] argv){        new ParseXmlExample().parseXmlDoc("students.xml");    }}

运行结果: 
student 
id:1 sex:female 
name:zhangsan 
address 
home:zhengzhou 
company:HIST 

student 
id:2 sex:male 
name:wangwu 
address 
home:beijing 

company:dongzhi 


将一段符合xml标准的string转换成xml文档中的element对象(使用dom4j) 

 private static Element getElementFromString(String s) {SAXReader builder = new SAXReader();Document doc = null;Element element = null;try {doc = builder.read(new StringReader(s));} catch (DocumentException e) {// TODO Auto-generated catch blocke.printStackTrace();}if (doc != null) {element = doc.getRootElement();}return element;}