アンマーシャリングのみ
アンマーシャリングを行っているだけの場合は、 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
拡張機能を使用できます。