1

基本的には、この質問の逆をやりたいと思っています。

Microsoft の Bing バッチ ジオコード サービスから XML を取得しています。一部の要素は次のようになっています (ここから盗み出されています)。

<DataflowJob>
    <Id>5bf10c37df944083b1879fbb0556e67e</Id>
    <Link role="self">https://spatial.virtualearth.net /REST/v1/dataflows/Geocode/5bf10c37df944083b1879fbb0556e67e</Link>
    <Link role="output" name="succeeded">https://spatial.virtualearth.net/REST/v1/dataflows/Geocode/5bf10c37df944083b1879fbb0556e67e/output/succeeded</Link>
    <Link role="output" name="failed">https://spatial.virtualearth.net/REST/v1/dataflows/Geocode/5bf10c37df944083b1879fbb0556e67e/output/failed</Link>
    <Description>Xml</Description>
    <Status>Completed</Status>
    ...
</DataflowJob>

<Link>要素には属性とテキスト コンテンツがあることに注意してください。私がデシリアライズしようとしている関連するPOJOクラスは次のとおりです。

class DataflowJob
{
    String Id;
    @XStreamImplicit
    List<Link> Links;
    String Description;
    Status Status;
    ...
}

class Link
{
    @XStreamAsAttribute
    Role role;
    @XStreamAsAttribute
    Name name;
    String url;
}

私の現在の構成 (クラスはエイリアス化され、属性は自動検出され、その他すべて) では、XStream は要素のNameおよびRole属性を適切に逆シリアル化します<Link>が、実際のリンク テキスト自体は逆シリアル化しません。

XStream でそのテキストをオブジェクトのStringフィールドにデシリアライズするにはどうすればよいですか?Link

このためだけに、リンクテキスト*の周りに新しい要素を手動で挿入する必要はありません。


*例: 置き換え

<Link role="self">
    https://long/url/here
</Link>

<Link role="self">
    <url>https://long/url/here</url>
</Link>
4

1 に答える 1

1

XStreamはこれに適したツールではありません。XStreamは、任意のXMLをシリアル化/逆シリアル化するのではなく、任意のJavaオブジェクトグラフをXMLにシリアル化/逆シリアル化することに重点を置いています。

それはあなたの意志にXStreamを曲げる困難な戦いになるでしょう。JAXB(JavaSE6に組み込まれている)やJiBXなど、このタスク用に設計されたものを使用することをお勧めします。

于 2010-06-15T18:44:07.353 に答える