2

私は次のようなXMLを持っています。

 <hotelRoomDetails>
  <NightRates>
   <Night1>67</Night1>
   <Night2>67.5</Night2> 
   ........
   ........
   <Night25>65</Night25> 
  </NightRates>
  .......
  </hotelRoomDetails>

要素 Night1、Night2、Night3 は常に動的であり、このカウントは 1 から 35 回まで変化する可能性があります。親タグ<NightRates>は常に一貫しています。

要素..<Night1><Night2>は他の属性がありません。1 泊あたりのホテル料金に関する情報を提供します。

個々の夜の料金情報を含む「LinkedList」(順序を保持するため) を作成したいと考えています。要素の出現回数を知らずにこの状況をどのように処理できますか? このxmlのJavaクラスを作成するには?

4

2 に答える 2

2

タイプ any の NightRates フィールドを作成できます。そして、org.w3c.dom.Element を介してそのコンテンツを操作します。

@XmlAnyElement
protected Element NightRates;
于 2013-11-07T11:59:54.623 に答える
1

アンマーシャリングのみ

アンマーシャリングを行っているだけの場合は、 a を使用StreamReaderDelegateして数字の接尾辞を取り除くことができます。

デモ

import javax.xml.bind.*;
import javax.xml.stream.*;
import javax.xml.stream.util.StreamReaderDelegate;
import javax.xml.transform.stream.StreamSource;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(HotelRoomDetails.class);

        XMLInputFactory xif = XMLInputFactory.newFactory();
        XMLStreamReader xsr = xif.createXMLStreamReader(new StreamSource("src/forum19834756/input.xml"));
        xsr = new StreamReaderDelegate(xsr) {
            @Override
            public String getLocalName() {
                String localName = super.getLocalName();
                if(localName.startsWith("Night") && !localName.equals("NightRates")) {
                    return "Night";
                }
                return localName;
            }

        };

        Unmarshaller unmarshaller = jc.createUnmarshaller();
        HotelRoomDetails details = (HotelRoomDetails) unmarshaller.unmarshal(xsr);
        System.out.println(details.getNightRates().size());
    }

}

ホテル客室詳細

次に、 という要素にマップするコレクション プロパティがありますNight

import java.util.*;
import javax.xml.bind.annotation.*;

@XmlRootElement
public class HotelRoomDetails {

    private List<String> nightRates = new ArrayList<String>();

    @XmlElementWrapper(name = "NightRates")
    @XmlElement(name = "Night")
    public List<String> getNightRates() {
        return nightRates;
    }

}

アンマーシャル & マーシャル

注: 私はEclipseLink JAXB (MOXy)のリーダーであり、JAXB (JSR-222)エキスパート グループのメンバーです。

この形式の読み書きをサポートする必要がある場合は、MOXy の@XmlVariableNode拡張機能を使用できます。

于 2013-11-18T21:13:19.193 に答える