1

初心者の質問です。聞く前に調べました!JAXB マーシャリングされた出力が次のようになるように、いくつかの Java クラスをモデル化したいと思います (本質的に HTML テーブル データ - XML)。

   <td>
      <span class="myClass">assets</span>
   </td>
   <td>some text</td>
   <td>some more text</td>

基本的に、すべてのテキスト値を使用して作業を行うのは簡単です。しかし、上記のスパン (別個の XMLElement であると宣言されている) の準備を含めようとすると、それ自体で「テキスト」を取得できません。たとえば、テキストを保持するために宣言した文字列属性の名前でテキストをラップするか、@XmlValue を使用してそれをオフにしようとすると、同じ宣言で XMLElement と XMLValue を混在させることはできないと不平を言います (たとえ上記のように、コンテキストに応じてどちらか一方のみを使用しています - 各 td にはスパンまたはテキストのいずれかが含まれていますが、両方が同時に含まれているわけではありません)。

出力の種類は次のとおりです。

<td><span class="myClass">assets</span></td><td><value>some text></value></td>

そして最終的には、「これらの「価値」要素をどのように削除するか」という問題に要約されます。をお願いします:

<td><span class="myClass">assets</span></td><td>some text</td>

データを投稿できますが、本当に必要な場合に限ります。私が望んでいたのは、誰かが親切に解決策を提供するには、上記の説明で十分だということです。

ご協力いただきありがとうございます。

4

1 に答える 1

2

わかりましたので、ここに答えがあります。シンプルに見えますが、他の人が jaxb のドキュメントをハッキングして精査する時間を 1 時間節約できることを願っています。次のことを行います - ここでの本当の問題は、TD を一種のポリモーフィックにすることです - 私の状況では、スパンまたはプレーンテキスト値のいずれかのみが必要でした。両方のユースケースはありませんでした。

@XmlSeeAlso(Span.class)
@XmlRootElement(name = "td")
public class TableData {

private List<Object> items;

public TableData() {}

public TableData(List<Object> items) {
    this.items = items;
}

@XmlMixed
@XmlAnyElement
public List<Object> getItems() {
    return items;
}

public void setItems(List<Object> items) {
    this.items = items;
}

}

Span クラスがあります (これも XMLElement として個別に宣言されています。秘訣は、値の型に関する制限を緩和することです (2 つの属性型を宣言しようとしないでください。テキスト用の文字列と、また、@XmlSeeAlso、@XmlMixed、および @XmlAnyElement にも注意してください。@XmlElementRef と @XmlElementRefs の方が適している場合があります。ここでの私の状況では、@XmlAnyElement を使用しても問題なく動作しました。

より完全な議論については、Blaise Doughan によるこの投稿の回答をお勧めします: JAXB - Java/ XMLValue & XMLElement conflict

于 2013-04-16T18:11:55.887 に答える