Java 从键值列表到属性key=value

Java 从键值列表到属性key=value,java,jaxb,Java,Jaxb,我有一个关于JAXB的问题。基本上,我有两门课: Element { String name List<Attribute> attributes; } Attribute { String key String value } 元素{ 字符串名 列出属性; } 属性{ 串键 字符串值 } 当然还有getter和setter,还有jaxbxmlrootelement 由此生成的XML是: <element> <attributes>

我有一个关于JAXB的问题。基本上,我有两门课:

Element {
  String name
  List<Attribute> attributes;
}

Attribute {
  String key
  String value
}
元素{
字符串名
列出属性;
}
属性{
串键
字符串值
}
当然还有getter和setter,还有jaxbxmlrootelement

由此生成的XML是:

<element>
    <attributes>
        <key>id</key>
        <value>1</value>
    </attributes>
    <name>My Element</name>
</element>

身份证件
1.
我的元素
但我要找的是更像这样的东西:

<element id="1">
    <name>My Element</name>
</element>

我的元素
也就是说,对于属性的每个实例,我希望key=value(作为属性)

这在JAXB中可能吗

问候,,
莫顿

我认为它不适用于列表。但有一种替代方法是使用

  • 地图和
  • @XmlAnyAttribute
你的例子是:

  @XmlRootElement
  public static class Element
  {
    @XmlElement
    String             name;

    @XmlAnyAttribute
    Map<QName, Object> map;
  }

  {
    //
    Element element = new Element();
    element.name = "a wonderful name";
    element.map = new HashMap<QName, Object>();
    element.map.put( new QName( "id" ), "1" );
    element.map.put( new QName( "other" ), "2" );
  }
@XmlRootElement
公共静态类元素
{
@XmlElement
字符串名;
@XmlAnyAttribute
地图;
}
{
//
元素=新元素();
element.name=“一个很棒的名字”;
element.map=新的HashMap();
element.map.put(新的QName(“id”),“1”);
element.map.put(新的QName(“其他”),“2”);
}
结果:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<element id="1" other="2">
    <name>a wonderful name</name>
</element>

好名字

致以最良好的祝愿

是的,我想我得做点类似的事情。我希望能够为它使用XmlAdapter,但它似乎没有做到这一点(因为XmlAnyAttribute需要映射,并且不能使用从适配器返回的内容)。最后,我让属性的getter返回新的AttributeToMapAdapter().marshal(_attributes)(其中_attributes是属性的内部列表)。谢谢