当前位置: 首页 > 知识库问答 >
问题:

从封送对象构造org.w3c.dom.document

邢璞
2023-03-14
public Document serialise() throws Exception {
    MyClass myObjectToMarshall = this.getObjectToMarshall();
    JAXBContext jc = JAXBContext.newInstance(MyClass.class);
    Marshaller m = jc.createMarshaller();
    m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
    m.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
    m.marshal(myObjectToMarshall , System.out);
    StringWriter xml = new StringWriter();
    m.marshal(myObjectToMarshall , xml);
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    factory.setNamespaceAware(true);
    DocumentBuilder builder = factory.newDocumentBuilder();
    return builder.parse(new InputSource(new StringReader(xml.toString())));
}
<myObjectToMarshall >
    <id>15</id>
    <code>MY_CODE</code>
    <label>MY_LABEL</label>
    <date>2015-09-15+02:00</date>
</myObjectToMarshall >

我猜myObjectToMarshall的编组已经正确完成。

但是,当我使用IntelliJ,builder.parse(new InputSource(new StringReader(xml.tostring()))))调试最后一条指令时,我得到一个空文档:[#Document:null]

是否有其他属性可设置?

共有1个答案

羊慈
2023-03-14

你的文件没问题。

实现toString()方法以返回“[”+getnodeName()+“:”+getnodeValue()+“]”。文档的nodename#document,文档的nodeValuenull。参见节点的javadoc。

如果需要DOM文档,不要将其编入字符串中,然后解析文本。直接编组到DOM树中即可:

public Document serialise() throws Exception {
    MyClass myObjectToMarshall = this.getObjectToMarshall();
    JAXBContext jc = JAXBContext.newInstance(MyClass.class);
    DOMResult domResult = new DOMResult();
    jc.createMarshaller().marshal(myObjectToMarshall, domResult);
    return (Document)domResult.getNode();
}
 类似资料:
  • 8.5. 构造值对象 Go有一个内建的new函数,用于在堆上为任意类型变量分配一个空间。新分配的 内存会内自动初始化为0。 例如,new(int) 会在堆上分配一个整型大小的空间, 然后初始化为0,然后返回 *int 类型的地址。 和C++中不同的 是,new是一个函数而不是运算符,因此 new int 用法是错误的。 对于字典和管道,必须用内建的make函数分配空间。对于没有初始化的字典或 管道

  • 我试图理解“有效现代C”中关于特殊成员函数生成的第17项,所以我尝试了一些示例,并试图对一些行为进行推理。书中说: ..当我提到移动操作move构造或移动分配一个数据成员或基类时,不能保证实际会发生移动。“Memberwise移动”实际上更像Memberwise移动请求,因为未启用移动的类型(即,对移动操作不提供特殊支持的类型,例如大多数C 98遗留类)将通过其复制操作“移动”。。。此外,不会为任

  • 问题内容: 具有如下数据结构: 如何构造Items的标题数组?如[‘One’,’Two’] 如果 标题 == [] {。,则此代码集将生成“语法错误:意外的标识符” 。 问题答案: 我只会用新数组返回标题 小提琴 此外,该错误是由于缺少括号引起的 应该 甚至更好

  • 我有以下课程布局: 我正在为服务创建一个单元测试,但我想将ServiceHelper用作一个“活动”类,但要模拟ServiceHelper中的构造函数参数。有没有办法通过Mockito实现这一点?

  • 问题内容: 示例:我有一些,并且我想要得到这样的东西: 现在,我看到两个解决方案: 首先获取文章,然后在具有一定条件的第二个查询中获取评论,最后将评论添加到相应的文章中。 好老加盟。对于我来说,我仍然不得不花很多时间处理数据才能进入我想要的结构。但是除此之外,我有点担心,因为有效载荷之类的将针对每个评论进行传输-除非有一种我不知道的连接方式。 我希望我的SQL文盲让我错过了简单的解决方案。 问题答

  • 问题内容: 我试图编组多个对象,例如添加到via中。我开始使用此设置: 和 但是,我得到了以下运行时例外: javax.xml.bind.JAXBException:com.jaxb.example.marshall.Book或其任何超类对此上下文都是未知的] 我的类型定义如下。 书:- 图书清单:- 马歇尔代码:- 我正在尝试放置注释(参考:-JAXB异常:该上下文未知的类)。该注释在我的版本中