当元素具有值和子元素时,使用带有xstream的转换器

时间:2011-10-30 05:39:22

标签: java xml xstream

我有一串XML,如下所示:

<e1 atr1="3" atr2="asdf">
<e1b atr3="3" atr4="asdf">
    <e1c atr5="3" atr6="asdf"/>
    TestValue1
</e1b>
<e1b atr3="3" atr4="asdf">
    <e1c atr5="3" atr6="asdf"/>
    TestValue2
</e1b>
</e1>

它与我过去解析过的其他XML不同,因为e1b元素的值为TestValue1TestValue2以及子元素(e1c)。

如果元素同时具有属性和值,则必须为xstream创建自定义转换器才能解析它。我的尝试在下面,但因为e1b元素有属性,子元素和值,我不知道如何处理它。在我的转换器中,我已经停止了对e1c子元素的所有引用。我需要向转换器添加什么才能正确处理e1c元素?目前,当我执行e1c时,xstream.fromXML()值不会被填充。

public class e1Converter implements Converter {

@SuppressWarnings("rawtypes")
public boolean canConvert(Class clazz) {
    return e1b.class == clazz;
}

public void marshal(Object object, HierarchicalStreamWriter hsw,
        MarshallingContext mc) {
    e1b e = (e1b) object;
    hsw.addAttribute("atr3", e.getAtr3());
    hsw.addAttribute("atr4", e.getAtr4());

    hsw.setValue(e.getE1bValue());
}

public Object unmarshal(HierarchicalStreamReader hsr,
        UnmarshallingContext uc) {

    e1b e = new e1b();
    e.setAtr3(hsr.getAttribute("atr3"));
    e.setAtr4(hsr.getAttribute("atr4"));
    e.setE1bValue(hsr.getValue());

    return e;
}

}

1 个答案:

答案 0 :(得分:1)

据xstream邮件列表中的Jörg所说:

  

其实你做不到。 XStream无法读取混合模式XML,即XML   text和child元素在同一级别混合。读者会   只是在未定义的行为中行事。这种XML根本就不行   适合XStream的分层流模型。有什么价值   这里的父母:

<parent> what <child/>is <child/> the <child/>value <child/>now? </parent
     

对不起,Jörg