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 正确地反序列化元素上的NameRole属性<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 的重点是将任意 java 对象图序列化/反序列化为 XML,而不是序列化/反序列化任意 XML。

这将是一场艰苦的战斗,让 XStream 屈服于您的意愿。我建议使用为此任务设计的更好的东西,例如 JAXB(内置于 JavaSE6)或 JiBX。

于 2010-06-15T18:44:07.353 回答