码迷,mamicode.com
首页 > 编程语言 > 详细

java 处理XML(dom4j-1.6.1)

时间:2015-07-21 01:28:10      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:

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专门用于数据传递:

技术分享
/***
 * 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:

技术分享
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

 

java 处理XML(dom4j-1.6.1)

标签:

原文地址:http://www.cnblogs.com/tobecrazy/p/4663175.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!