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 が 1 つの 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

そのためのメタデータはありません。keyvaluewith をマッピングすることで、(簡単に解析可能な) コンパクトな 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 に答える