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

Jaxb可以在没有根元素的情况下封送子元素吗?

宋涵衍
2023-03-14

我不确定以下问题是否适用于jaxb,但我还是会问。

在某个项目中,我们使用带有定义模式的jaxb来创建xml文件的下一个结构。

<aaa>
     <bbb>
        more inner children here
     </bbb>
     <bbb>
        more inner children here
     </bbb>
</aaa>

我们还使用jaxb的自动类生成来创建类:aaa和bbb,其中aaa生成为@XmlRootElement。

我们现在希望在新项目中使用相同的模式,该模式也将与以前的项目兼容。我想做的是使用相同的jaxb生成的类,而不需要对模式进行任何更改,以便仅将单个bbb对象封送到xml中。

JAXBContext jc = JAXBContext.newInstance("generated");
Marshaller marshaller = jc.createMarshaller();
marshaller.marshal(bbb, writer);

所以我们会得到下一个结果:

 <bbb>
    <inner child1/>
    <inner child2/>
    ...
 </bbb>

我目前无法这样做,因为marshaller大喊我没有定义@XmlRootElement。

实际上,我们试图避免将模式分为两个模式,一个只有bbb,另一个aaa导入bbb。

提前感谢!

共有2个答案

何星鹏
2023-03-14

我可能迟到了5年:)但你有没有试过这样的事情:

StringWriter stringWriter = new StringWriter();
JAXB.marshal(bbb, stringWriter);
String bbbString = stringWriter.toString();
蔚琦
2023-03-14

我可能迟到了3年,但你有没有尝试过这样的事情:

public static String marshal(Bbb bbb) throws JAXBException {
    StringWriter stringWriter = new StringWriter();

    JAXBContext jaxbContext = JAXBContext.newInstance(Bbb.class);
    Marshaller jaxbMarshaller = jaxbContext.createMarshaller();

    // format the XML output
    jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

    QName qName = new QName("com.yourModel.bbb", "bbb");
    JAXBElement<Bbb> root = new JAXBElement<Bbb>(qName, Bbb.class, bbb);

    jaxbMarshaller.marshal(root, stringWriter);

    String result = stringWriter.toString();
    LOGGER.info(result);
    return result;
}

这是我在没有rootElement列表/散集时使用的文章:http://www.source4code.info/2013/07/jaxb-marshal-unmarshal-with-missing.html

这对我来说效果很好。我写这封信是为了其他寻找答案的迷失灵魂。

所有最好的:)

 类似资料:
  • 使用cssSelector,我能够找到一些具有id属性的元素。例如: 使用Selenium 2(WebDriver)中的isDisplayed(),可以发现它是真的。 我的问题是单击下面的一些链接,我可以使用xpath找到这些链接,但使用isDisplayed()发现这些链接为false。 我尝试使用以下代码查找: 大小显示为1,但isDisplayed()返回false。 如何使此元素可见并能够

  • 我有以下JAXB对象: 我使用JAXB编组程序将对象转换为XML: 它运行平稳,没有任何异常,但是,结果总是缺少元素键。我试图将其改为Attribute,但它也不起作用。以下是输出示例: 我曾尝试将键更改为另一个名称,例如AuthKey,但它仍然缺失。我做错了什么? 编辑我发现了问题,这是因为我的键的值是空的。如果它包含值,则将其写入XML。然而,您能解释一下为什么在XMLElement中,我写了

  • 我有以下问题,当我生成XML文件时,Jaxb给根元素的名称空间添加前缀,我不知道如何跳过它。 我有软件包信息.java文件 我有根元素 结果我得到了 如果没有@XmlNs,它的工作方式也是一样的,将命名空间添加到@XmlRoolElement也没有帮助。它会有什么问题?

  • 问题内容: .content { 如果我不想使按钮模糊,我该怎么办? 问题答案: 如何禁用子元素上的模糊?

  • 问题内容: 我需要使用(在AngularJS中)列出数组中的所有元素。 复杂的是,数组的每个元素都将转换为表的一,两或三行。 我不能创建有效的html(如果用于元素上),因为和之间不允许使用任何类型的重复元素。 例如,如果在上使用ng-repeat ,我将得到: 无效的html。 但是我需要生成的是: 其中第一行由第一个数组元素生成,接下来的三行由第二个数组生成,第五行和第六个由最后一个数组元素生

  • 我正在使用JAXB解析器将通过http请求发送的XML转换为Java对象,同时根据XSD模式对其进行验证。问题是,当调用unmarshal()方法时,它会引发以下异常: UnMarshalException:意外元素(URI:“http://www.somedomain.com/”,local:“assign”)。所需元素为(无) 如果从根XML元素中删除名称空间,它会引发相同的异常,uri部分为