텍스트를 읽는 방법과 요소는 간단한 XML에서 기본적으로 제공되지 않습니다. 변환기를 사용해야합니다. 하나의 텍스트 만 읽는 것을 제외하고는 똑같은 문제에 대답하는 https://stackoverflow.com/questions/17462970/simpleframwork-xml-element-with-inner-text-and-child-elements을 읽을 수 있습니다.
다음은 단일 문자열에서 배수 텍스트 및 href를 얻는 방법입니다.
@Root(name = "a")
public class A {
@Attribute(required = false)
private String href;
@Text
private String value;
@Override
public String toString(){
return "<a href = \"" + href + "\">" + value + "</a>";
}
}
그런 다음 텍스트 클래스는 '텍스트'를 읽고, : 그것은 XML에서와 같이 먼저
, 나는 태그를 인쇄 할의 toString 메도과 함께 'A'태그에 대한 클래스를 생성 변환이 필요 여기서 I는 표준 시리얼 라이저와 'A'태그를 읽고, XML 문자열로 다시 얻을 수있는 클래스에서의 toString 메도를 추가
@Root(name = "Text")
@Convert(Text.Parsing.class)
public class Text {
@Element
public String value;
private static class Parsing implements Converter<Text> {
// to read <a href...>
private final Serializer ser = new Persister();
@Override
public Text read(InputNode node) throws Exception {
Text t = new Text();
String s;
InputNode aref;
// read the begining of text (until first xml tag)
s = node.getValue();
if (s != null) { t.value = s; }
// read first tag (return null if no more tag in the Text)
aref = node.getNext();
while (aref != null) {
// add to the value using toString() of A class
t.value = t.value + ser.read(A.class, aref);
// read the next part of text (after the xml tag, until the next tag)
s = node.getValue();
// add to the value
if (s != null) { t.value = t.value + s; }
// read the next tag and loop
aref = node.getNext();
}
return t;
}
@Override
public void write(OutputNode node, Text value) throws Exception {
throw new UnsupportedOperationException("Not supported yet.");
}
}
}
참고. 'a'태그를 텍스트로 직접 읽는 방법을 찾지 못했습니다.
그리고 주요 클래스 (텍스트 요소의 deserialisation로 변환 방법을 매핑 AnnotationStrategy 잊지 마세요) :
<text>
A communications error has occurred. Please try again, or contact <a href="someURL">administrator</a>.
Alternatively, please <a href = "someURL' />">register</a>.
</text>
: 나는 다음과 같은 XML 파일과 함께 사용하면
public class parseText {
public static void main(String[] args) throws Exception {
Serializer serializer = new Persister(new AnnotationStrategy());
InputStream in = ClassLoader.getSystemResourceAsStream("file.xml");
Text t = serializer.read(Text.class, in, false);
System.out.println("Texte : " + t.value);
}
}
을 나는이 당신을 도움이되기를 바랍니다
Texte :
A communications error has occurred. Please try again, or contact <a href = "someURL">administrator</a>.
Alternatively, please <a href = "someURL' />">register</a>.
:
그것은 다음과 같은 결과를 제공 당신의 문제를 해결하십시오.
예,하지만이 문자열을 처음부터 파악해야합니다. 처음으로 태그가 발견되면 요소 처리가 중단 된 것 같습니다. –
user2635155