我有一串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元素的值为TestValue1
和TestValue2
以及子元素(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;
}
}
答案 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