Я разбираю некоторые тесты QTI и вопросы на Java с помощью SimpleFramework. Я уже разобрал множество вопросов, но я как бы застрял здесь. Я не знаю, как это разобрать.

Я не знаю, как мне работать с этим текстом без тега. Парсинг работает, но как мне добраться до этого текста?

<p>
   Now is the 
   <gap identifier="gap1"/>
   of our discontent<br/> Made glorious 
   <gap identifier="gap2"/>
   by this sun of York;
   <br/> And all the clouds that lour'd upon our house
   <br/> In the deep bosom of the ocean buried.
</p>

Я получил это

public class P extends AtomicBlock {}

public abstract class AtomicBlock extends BlockStatic {

@ElementListUnion({
        @ElementList(entry = "gap", type = Gap.class, inline = true, required = false),
        @ElementList(entry = "br", type = Br.class, inline = true, required = false) })
private List<Inline> inline;

public List<Inline> getInline() {
    return inline;
}

public void setInline(List<Inline> inline) {
    this.inline = inline;
}
}
0
Laurent Russier 28 Мар 2014 в 13:34
1
Не похоже на XML, похоже на HTML
 – 
Jay
28 Мар 2014 в 13:38
QTI использует некоторую модель контента, взятую из XHTML (imsglobal.org/question/qtiv2p1 /…). Вот это просто часть xml файла
 – 
Laurent Russier
28 Мар 2014 в 13:54

1 ответ

Лучший ответ

Здесь решение, у меня было настраиваемой функции чтения.

@Root(name = "p")
@Convert(value = P.PConvert.class)
public class P extends AtomicBlock{

public P() {
}

@ElementListUnion({

        @ElementList(entry = "gap", type = Gap.class, inline = true, required = false),
        @ElementList(entry = "br", type = Br.class, inline = true, required = false) })
private List<Object> inline;

public List<Object> getInline() {
    return inline;
}

public void setInline(List<Object> inline) {
    this.inline = inline;
}

@Override
public String toString() {
    return "TestP [inline=" + inline + "]";
}

static class PConvert implements Converter<P> {
    private final Serializer ser = new Persister();

    @Override
    public P read(InputNode node) throws Exception {
        P p = new P();

        p.inline = new ArrayList<Object>();
        p.inline.add(node.getValue());
        InputNode inputNode = node.getNext();

        while (inputNode != null) {
            String tag = inputNode.getName();
            if (tag.equalsIgnoreCase("gap")) {
                p.inline.add(ser.read(Gap.class, inputNode));
            } else if (tag.equalsIgnoreCase("br")) {
                p.inline.add(ser.read(Br.class, inputNode));
            }
            String value = node.getValue();
            p.inline.add(value);
            inputNode = node.getNext();
        }

        return p;
    }

    @Override
    public void write(OutputNode arg0, P arg1) throws Exception {
        // TODO Auto-generated method stub

    }
}

}
1
BenMorel 14 Сен 2014 в 14:13