【问题标题】:How to set the value of root element using JaxB如何使用 JaxB 设置根元素的值
【发布时间】:2021-11-12 00:37:53
【问题描述】:

使用 JAXB 创建 XML 后,无法使用 @XmlElement@XmlAttribute 以预期的方式获取 @XmlRootElement 的值。

代码 1

@XmlRootElement(name = "USER_ID")
@XmlAccessorType(XmlAccessType.NONE)
public class UserD {

    @XmlElement(name = "USER_ID")
    private String userId;
    
    @XmlElement(name = "Name")
    private ArrayList<Name> name;

输出

<USER_ID>
            <USER_ID>1</USER_ID>
            <Name></Name>
            <Name></Name>
            <Name></Name>
<USER_ID>

代码 2

@XmlRootElement(name = "USER_ID")
@XmlAccessorType(XmlAccessType.NONE)
public class UserD {

    @XmlAttribute(name = "USER_ID")
    private String userId;
    
    @XmlElement(name = "Name")
    private ArrayList<Name> name;

输出 2

<USER_ID USER_ID="1">
            <Name></Name>
            <Name></Name>
            <Name></Name>
<USER_ID>

需要的输出

<USER_ID>1
            <Name></Name>
            <Name></Name>
            <Name></Name>
<USER_ID>

【问题讨论】:

  • 我也无法让它工作,但 XmlValue 和 XmlMixed 注释可以帮助您找到可能的解决方案
  • 您是否使用其他方法来完成这项工作?

标签: java xml jaxb marshalling


【解决方案1】:

使用 @XmlMixed 注释将值与 xml 元素一起使用。

@XmlRootElement(name = "USER_ID")
@XmlAccessorType(XmlAccessType.NONE)
public class UserD {

    @XmlMixed
    private List<String> userId;
    
    @XmlElement(name = "Name")
    private ArrayList<Name> name;

    //getter and setters
}

输出

<USER_ID>1
    <Name></Name>
    <Name></Name>
    <Name></Name>
<USER_ID>

编辑

Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

将换行符 (\n) 添加到值的末尾,如下所示

userId.add("1\n")

【讨论】:

  • 这行得通。谢谢!但是我在同一行中得到 、 1 和第一个 ,而不是如上所示。
  • @SSharma2203 将MarshallerJAXB_FORMATTED_OUTPUT 属性设置为true。请参考上面修改后的答案。如果它适合你,请接受答案。 :)
  • 这已经设置好了。它在使用 @XMLMixed 之前被格式化,但在使用之后,下一个标签开始与根标签内联。
  • @SSharma2203 请参考上面修改后的答案。
  • 这是有道理的,但我不认为这是正确的方法,因为那时也应该添加一个 TAB 字符,这将是非常动态的添加。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-05
相关资源
最近更新 更多