转载

java 处理XML(dom4j-1.6.1)

java 处理XML(dom4j-1.6.1)

Java 处理xml有很多框架,今天使用主流框架dom4j-1.6.1

下载地址:http://www.dom4j.org/dom4j-1.6.1/

Dom4j,是一款开源的处理XML, XPath, and XSLT的框架,它容易使用,并且完全支持DOM, SAX, and JAXP.

写XML 文件

  • 首先创建一个XMLwriter,吧文件写到output.xml
// lets write to a file         XMLWriter writer = new XMLWriter(             new FileWriter( "output.xml" )         );
  • 创建一个xml Document
Document document = DocumentHelper.createDocument();
  • 接着创建 元素的根节点
Element root = document.addElement( "root" );
  • 接下来在根节点添加元素和属性
root.addElement( "author" )             .addAttribute( "name", "James" )             .addAttribute( "location", "UK" )             .addText( "James Strachan" );
  • 最后保存文件
     writer.write( document );         writer.close();
  • 这样保存效果很差,很不美观,如果想要漂亮的效果
OutputFormat format = OutputFormat.createPrettyPrint(); XMLWriter writer = new XMLWriter(new FileWriter("output.xml"), format);

最终的:

import java.io.FileWriter; import java.io.IOException; import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.XMLWriter; public class XMLWriterTest {     /**      * @author Young      * @param args      * @throws IOException      */     public static void main(String[] args) throws IOException {  OutputFormat format = OutputFormat.createPrettyPrint();  XMLWriter writer = new XMLWriter(new FileWriter("output.xml"), format);  Document document = DocumentHelper.createDocument();  Element root = document.addElement("root");  root.addComment("This is xml comment");  root.addElement("author").addAttribute("name", "James")   .addAttribute("location", "UK").addText("James Strachan");  writer.write(document);  writer.close();     } } 

输出效果如下:

<?xml version="1.0" encoding="UTF-8"?>  <root>   <!--This is xml comment-->   <author name="James" location="UK">James Strachan</author> </root>

嵌套写XML

想要的效果如下:

<?xml version="1.0" encoding="UTF-8"?>  <StudentInfo Class="1">   <!--This is Class 1 student information-->   <student name="Jack" Sex="Male" Birthday="1988/07/05">100001     <scores score="90"/>   </student>   <student name="Lisa" Sex="Female" Birthday="1989/02/12">100002     <scores score="98"/>   </student>   <student name="Steven" Sex="Male" Birthday="1987/11/18">100003     <scores score="59"/>   </student>   <student name="Jenny" Sex="Female" Birthday="1989/03/18">100004     <scores score="69"/>   </student>   <student name="Lucy" Sex="Female" Birthday="1990/01/26">100005     <scores score="90"/>   </student>   <student name="Lewis" Sex="Male" Birthday="1989/04/06">100006     <scores score="82"/>   </student> </StudentInfo>

每个student节点下设置一个score节点

并且所有student节点属性都一样,于是乎可以创建一个student bean专门用于数据传递:

java 处理XML(dom4j-1.6.1)
/***  * This Class is for Student bean  * @author Young  *  */ public class Student {  private int stud_Id;  private String stud_Name;  private String sex;  private String birthday;  private String score;  public int getStud_Id() {   return stud_Id;  }  public void setStud_Id(int stud_Id) {   this.stud_Id = stud_Id;  }  public String getStud_Name() {   return stud_Name;  }  public void setStud_Name(String stud_Name) {   this.stud_Name = stud_Name;  }  public String getSex() {   return sex;  }  public void setSex(String sex) {   this.sex = sex;  }  public String getBirthday() {   return birthday;  }  public void setBirthday(String birthday) {   this.birthday = birthday;  }  public String getScore() {   return score;  }  public void setScore(String score) {   this.score = score;  }  /**   * This method is a constructor   *    * @author Young   * @param id   * @param name   * @param sex   * @param birthday   * @param score   */  public Student(int id, String name, String sex, String birthday,    String score) {   this.stud_Id = id;   this.stud_Name = name;   this.sex = sex;   this.birthday = birthday;   this.score = score;  } } 
View Code

接下来初始化并放到一个ArrayList:

java 处理XML(dom4j-1.6.1)
static List<Student> students = new ArrayList<Student>(); /**  * @author Young  */ public static void init() {     Student stu1 = new Student(100001, "Jack", "Male", "1988/07/05", "90");     Student stu2 = new Student(100002, "Lisa", "Female", "1989/02/12", "98");     Student stu3 = new Student(100003, "Steven", "Male", "1987/11/18", "59");     Student stu4 = new Student(100004, "Jenny", "Female", "1989/03/18",      "69");     Student stu5 = new Student(100005, "Lucy", "Female", "1990/01/26", "90");     Student stu6 = new Student(100006, "Lewis", "Male", "1989/04/06", "82");     students.add(stu1);     students.add(stu2);     students.add(stu3);     students.add(stu4);     students.add(stu5);     students.add(stu6); } 
View Code

创建一个写到XML文件的方法:

/**  * @author Young  * @param studs  * @return  * @throws IOException  */ public static Document createDocument(List<Student> studs)  throws IOException {     OutputFormat format = OutputFormat.createPrettyPrint();     XMLWriter writer = new XMLWriter(new FileWriter("output.xml"), format);     Document document = DocumentHelper.createDocument();     Element root = document.addElement("StudentInfo");     root.addAttribute("Class", "1");     root.addComment("This is Class 1 student information");     for (Student std : studs) {  root.addElement("student").addAttribute("name", std.getStud_Name())   .addAttribute("Sex", std.getSex())   .addAttribute("Birthday", std.getBirthday())   .addText(Integer.toString(std.getStud_Id()))   .addElement("scores").addAttribute("score", std.getScore());     }     writer.write(document);     writer.close();     return document; } 

读取XML文件

  • 与写文件相似,首先创建一个SAXReader
SAXReader reader = new SAXReader()
  • 接着创建XML document
Document document = reader.read(file);
  • 创建根元素并从document获取
Element root = document.getRootElement();
  • 创建元素迭代器或属性迭代器获取相关元素和属性
// iterate through child elements of root   for ( Iterator i = root.elementIterator(); i.hasNext(); ) {    Element element = (Element) i.next();    // do something   }   // iterate through attributes of root    for ( Iterator i = root.attributeIterator(); i.hasNext(); ) {    Attribute attribute = (Attribute) i.next();    // do something   } 

以之前嵌套后的XML为例:

/**This method is for read XML  * @author Young  * @param file  * @throws DocumentException  */ public static void readDocument(String file) throws DocumentException {  SAXReader reader = new SAXReader();  Document document = reader.read(file);  Element root = document.getRootElement();  for (Iterator<?> i = root.elementIterator(); i.hasNext();) {   Element element = (Element) i.next();   if (!element.getName().equalsIgnoreCase("Student")) {    System.out.println("StudentInfo is:");    continue;   }   // iterate through child elements of root with element name   // "student"   for (Iterator<?> j = element.attributeIterator(); j.hasNext();) {    Attribute attribute = (Attribute) j.next();    System.out.print("attribute name " + attribute.getName()      + " ->" + attribute.getName());    System.out.println(" attribute value " + attribute.getValue());   }   System.out.println("attribute value " + element.getText());   // get path   System.out.println("attribute name " + element.getName() + " ->"     + element.getPath());  } } 

可以通过:

getName/getPath/getValue 等方法是获取相关内容

运行结果:

attribute name name ->name attribute value Jack attribute name Sex ->Sex attribute value Male attribute name Birthday ->Birthday attribute value 1988/07/05 attribute value 100001 attribute name student ->/StudentInfo/student attribute name name ->name attribute value Lisa attribute name Sex ->Sex attribute value Female attribute name Birthday ->Birthday attribute value 1989/02/12 attribute value 100002 attribute name student ->/StudentInfo/student attribute name name ->name attribute value Steven attribute name Sex ->Sex attribute value Male attribute name Birthday ->Birthday attribute value 1987/11/18 attribute value 100003 attribute name student ->/StudentInfo/student attribute name name ->name attribute value Jenny attribute name Sex ->Sex attribute value Female attribute name Birthday ->Birthday attribute value 1989/03/18 attribute value 100004 attribute name student ->/StudentInfo/student attribute name name ->name attribute value Lucy attribute name Sex ->Sex attribute value Female attribute name Birthday ->Birthday attribute value 1990/01/26 attribute value 100005 attribute name student ->/StudentInfo/student attribute name name ->name attribute value Lewis attribute name Sex ->Sex attribute value Male attribute name Birthday ->Birthday attribute value 1989/04/06 attribute value 100006 attribute name student ->/StudentInfo/student 
正文到此结束
Loading...