0

Socrata というデータベース API を使用して、リサイクル サービスの情報を解析しています。このサービスからの XML 出力の例は、次の場所にあります。

http://www.datakc.org/api/views/zqwi-c5q3/rows.xml?search=%22computer%22

お分かりのように、これは悪い XMLのように思えます。私が抱えている問題は、行のリストを含むタグがrow(属性なしで) 呼び出され、各行もrow(属性付きで) 呼び出されることです。これは XStream を完全に混乱させるように思われ、XStream でこのデータを処理する方法がまったく見つかりません。

XStream/XML の専門家で、私に何ができるか知っている人はいますか?

4

2 に答える 2

1

解決策はあまり直感的ではありませんでしたが、なんとか理解できました。最初に、応答タグを表すクラスを宣言する必要がありました。このクラスには、リサイクル サービスのリストのコンテナーも含まれています。クラスの外観は次のとおりです。

@XStreamAlias("response")
public class QueryResponse {

    @XStreamAlias("row")
    private RecycleServices services;

    public RecycleServices getServices() {
        return services;
    }

    public void setServices(RecycleServices services) {
        this.services = services;
    }

}

RecycleServices クラスは、RecycleService クラスの暗黙的な List をラップする本当のトリックです。

@XStreamAlias("row")
public class RecycleServices {

    @XStreamImplicit(itemFieldName = "row")
    private List<RecycleService> services = new ArrayList<RecycleService>();

    public List<RecycleService> getServices() {
        return services;
    }

    public void setServices(List<RecycleService> services) {
        this.services = services;
    }

}

RecycleService クラスは、各リサイクル サービス行を単純に表したものにすぎず、この質問の答えにはあまり関係ありません。これを理解するのにいくらかフラストレーションがありました。これが誰かの助けになることを願っています。

于 2012-08-16T22:46:44.340 に答える
0

これは解決策というよりも回避策ですが、行/要素の命名は、XSLT を使用して DOM を XStream がより適切に利用できるものに書き換えることで克服できます。

于 2012-08-15T10:05:41.900 に答える