Java 从下到上创建类实例的XML表示?
我正在考虑以类似Java 从下到上创建类实例的XML表示?,java,xml,dom,creation,Java,Xml,Dom,Creation,我正在考虑以类似toString()的方式编写一个方法,以便它返回类实例的XML表示 首先我想把它写成 public Element toElement() { // create Element instance and fill it } 但是我无法在内部创建空的Element实例,因为Element创建需要Document实例来调用它的createElement() 所以我重写了这个方法 public Element toElement(Document doc) { El
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\u REQUEST\u ERR
,因为只有将元素
实例附加到父层次结构后才能填充它
所以我要重写方法如下
public Element toElement(Document doc, Element parent) {
Element ans = doc.createElement("myclasstag");
parent.appendChild(ans);
// filling ans
return ans;
}
但这样我就不需要返回ans,因为它已经连接到了应该连接的位置,所以它变成了
public void append(Document doc, Element parent) {
Element ans = doc.createElement("myclasstag");
parent.appendChild(ans);
// filling ans
}
它现在绝对不喜欢toString()
是否可以像toString()
那样自下而上创建XML实例?使用,我可以做到:
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>
Abcd
30
当然,它是完全可定制的。使用,我可以做到:
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>
Abcd
30
当然,它是完全可定制的。您可以,但这需要大量的工作。这就是为什么像XStream或JAXB这样的东西存在的原因,所以您不必这样做。您可以这样做,但这需要大量的工作。这就是为什么存在XStream或JAXB之类的东西,所以您不必这样做。