Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从下到上创建类实例的XML表示?_Java_Xml_Dom_Creation - Fatal编程技术网

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之类的东西,所以您不必这样做。