从下到上创建类实例的XML表示?

时间:2012-06-08 14:51:15

标签: java xml dom creation

我正在考虑以toString()方式编写方法,以便它返回类实例的XML表示。

首先我想把它写成

public Element toElement() {
    // create Element instance and fill it
}

但是我无法在里面创建空的Element实例,因为Element创建需要Document个实例来调用它createElement()

所以我把方法重写为

public Element toElement(Document doc) {
   Element ans = doc.createElement("myclasstag");

   // filling ans

   return ans;
}

但后来我得到了运行时异常HIERARCHY_REQUEST_ERR,因为在将Element实例附加到父层次结构之前,它无法填充public Element toElement(Document doc, Element parent) { Element ans = doc.createElement("myclasstag"); parent.appendChild(ans); // filling ans return ans; } 实例。

所以我要重写方法如下

public void append(Document doc, Element parent) {

   Element ans = doc.createElement("myclasstag");
   parent.appendChild(ans);

   // filling ans
}

但是这种方式我不需要返回ans,因为它已经附加到应该的位置,所以它变成了

toString()

现在绝对不喜欢toString()

是否可以像{{1}}一样从低到高的方式创建XML实例?

1 个答案:

答案 0 :(得分:1)

使用XStream,我可以这样做:

package com.adarshr;

import com.thoughtworks.xstream.XStream;


class Parent {
    private String name;
    private int age;

    public Parent(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

public class Test {
    private Parent parent = new Parent("Abcd", 30);

    public static void main(String[] args) throws Exception {
        System.out.println(new Test());
    }

    @Override
    public String toString() {
        return new XStream().toXML(this);
    }
}

打印哪些:

<com.adarshr.Test>
  <parent>
    <name>Abcd</name>
    <age>30</age>
  </parent>
</com.adarshr.Test>

当然,它完全可以自定义。