У меня есть строка 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;
}
}