1

我有以下课程

@XmlRootElement(name = "ExecutionRequest")
@XmlAccessorType(XmlAccessType.FIELD)
public class ExecutionRequest {

    @XmlElement(name="Command")
    private String command;

    @XmlElementWrapper(name="ExecutionParameters")
    @XmlElement(name="ExecutionParameter")
    private ArrayList<ExecutionParameter> ExecutionParameters;

}
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class ExecutionParameter {

    @XmlElement(name = "Key")
    private String key;

    @XmlElement(name = "Value")
    private String value;

}

当我编组 ExecutionRequest 对象时,我得到以下 XML -

<ExecutionRequest>
  <Command>RetrieveHeader</Command>
  <ExecutionParameters>
    <ExecutionParameter>
      <Key>tid</Key>
      <Value>ASTLGA-ALTE010220101</Value>
    </ExecutionParameter>
    <ExecutionParameter>
      <Key>ctag</Key>
      <Value>dq</Value>
    </ExecutionParameter>
  </ExecutionParameters>
</ExecutionRequest>

根据 JAXB 绑定,它工作正常。但我希望 XML 在一个 ExecutionParameter 中包含所有键值集合,例如 -

<ExecutionRequest>
  <Command>RetrieveHeader</Command>
  <ExecutionParameters>
    <ExecutionParameter>
      <Key>tid</Key>
      <Value>ASTLGA-ALTE010220101</Value>
      <Key>ctag</Key>
      <Value>dq</Value>
    </ExecutionParameter>
  </ExecutionParameters>
</ExecutionRequest>

有没有办法通过更改注释来获得这样的xml。如果需要澄清,请告诉我。提前致谢。

4

1 回答 1

0

没有元数据。key您可以通过映射和valuewith获得紧凑的 XML 表示(易于解析)@XmlAttribute

<ExecutionParameters>
     <ExecutionParameter Key="a" Value="b"/>
     <ExecutionParameter Key="c" Value="d"/>
</ExecutionParameters>

更新

如果您必须支持这种 XML 格式,那么您可以使用 JAXB 和 XSLT 来获得所需的结果:

    // Create Transformer
    TransformerFactory tf = TransformerFactory.newInstance();
    StreamSource xslt = new StreamSource(
            "src/example/stylesheet.xsl");
    Transformer transformer = tf.newTransformer(xslt);

    // Source
    JAXBContext jc = JAXBContext.newInstance(ExecutionRequest.class);
    JAXBSource source = new JAXBSource(jc, request);

    // Result
    StreamResult result = new StreamResult(System.out);

    // Transform
    transformer.transform(source, result);

了解更多信息

于 2013-08-19T11:55:50.710 回答