Yahoo の YQL Web サービスから取得した XML の一部をアンマーシャリングする必要があります。XML は次のようになります。
<?xml version="1.0" encoding="UTF-8"?>
<query xmlns:yahoo="http://www.yahooapis.com/v1/base.rng" yahoo:count="8" yahoo:created="2012-07-16T16:43:15Z" yahoo:lang="en-US">
<results>
<results>
<GsearchResultClass>GwebSearch</GsearchResultClass>
<unescapedUrl>http://www.test.com/nl/nieuws</unescapedUrl>
<url>http://www.test.com/nl/nieuws</url>
<visibleUrl>www.test.com</visibleUrl>
<cacheUrl>http://www.google.com/search?q=cache:0B4z0dyd94gJ:www.test.com</cacheUrl>
<title>Nieuws | test.com</title>
<titleNoFormatting>Nieuws | test.com</titleNoFormatting>
<content>text text text text text text text text <b>...</b></content>
</results>
[...]
</results>
</query>
ちなみに、重複した「results」キーはエラーではありません。
私は次のクラスでこれを非整列化しようとしています:
@XmlRootElement(name="query")
public class YQL<T> {
List<T> results;
@XmlElementWrapper(name="results")
@XmlElement(name="results")
public List<T> getResults() {
return results;
}
public void setResults(List<T> results) {
this.results = results;
}
}
@XmlType
public class SearchResult{
String url,title,content;
@XmlElement
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
[...]
public class YQLFeedReaderImpl<T> implements FeedReader<YQL<T>> {
private Class<T> resultClazz;
[...]
final JAXBContext context = JAXBContext.newInstance(YQL.class,resultClazz);
final Unmarshaller unmarshaller = context.createUnmarshaller();
URL url = new URL([....]);
return (YQL<T>) unmarshaller.unmarshal(url);
T 要素に対して返されるのは、SearchResult ではなく汎用の ElementNSImpl です。
これに対処する方法について何か提案はありますか?
乾杯、マーク