使用XStream中的属性反序列化XML文本元素

时间:2010-06-15 18:32:34

标签: java xml xstream xml-deserialization

基本上,我想反过来this question

我从微软的Bing批量地理编码服务获取XML,并且一些元素看起来像这样(从here挖出):

<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>

1 个答案:

答案 0 :(得分:1)

XStream不是一个合适的工具。 XStream的重点是将任意java对象图序列化/反序列化为XML,而不是序列化/反序列化任意XML。

根据你的意愿弯曲XStream将是一场艰苦的战斗。我建议使用更适合此任务的东西,例如JAXB(内置于JavaSE6)或JiBX。