Использование конвертеров с xstream, когда элемент имеет значение и дочерние элементы - PullRequest
1 голос
/ 30 октября 2011

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

}

1 Ответ

1 голос
/ 02 ноября 2011

Согласно Йоргу из списка рассылки xstream:

На самом деле вы не можете.XStream не может читать смешанный режим XML, то есть XML, где текстовые и дочерние элементы смешаны на одном уровне.Читатели будут просто действовать в неопределенном поведении.Этот вид XML просто не вписывается в модель иерархического потока XStream.Каково значение родительского здесь:

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

Извините, Йорг

...