JAXB:根据值动态创建XML属性

时间:2014-12-23 04:09:09

标签: java xml jaxb unmarshalling

我对生成XML文档有着奇怪的要求。我需要根据其他标签的值添加xml属性。

在下面的xml中,对于Row标记,我需要根据<table>标记中的值显示 Column1 值。像二维矩阵一样。

例如:如果我在我的<table>中有价值 <table name="table1" row="1" column="1" >

然后在我的<Row>代码中,我需要添加以下属性:Column1(列标记属性名称)= "table1"(表格标记属性名称)

我为这个关联生成了值但是如何像这样创建动态标记xmlAttribute?

我需要以这种方式生成我的XML ..

<Tree name="" desc="" title="" >
    <Column>
         <Column name="Column1" desc="" group="" id="1"/>
    </Column>
    <Row>
        <Row id =1 name=" " desc="" =""  Column1 = "table1">
           <Row id = 2 name="" desc=""   Column1 = "table2" />
        </Row>
        <Row id = 3 name=" " desc="" id="" Column1 = "table3" />
    </Rows>
    <table>
         <table name="table1"  row="1" column="1" > 
         <table name="table2"  row="2" column="1" > 
          <table name="table3"  row="3" column="1" > 
    </table>
</Tree>

1 个答案:

答案 0 :(得分:0)

这是使用具有任意名称的属性编写用于编组的类的方法。

public class Row {
  private Map<QName,Object> any;
  private String name;
  private String type;

  @XmlAnyAttribute
  public Map<QName,Object> getAny(){
    if( any == null ){
      any = new HashMap<QName,Object>();
    }
    return any;
  }

  @XmlAttribute
  public String getName(){
    return name;
  }
  public void setName( String value ){
    name = value;
  }
  @XmlAttribute
  public String getType(){
    return type;
  }
  public void setType( String value ){
    type = value;
  }
}

如果您没有使用名称空间,设置属性将如下所示:

Row r1 = new Row();
r1.getAny().put( new QName( "Column1" ), "table1" );