Java SimpleFramwork XML:包含内部文本和子元素的元素
在使用无法更改的特定格式的SimpleFramework反序列化xml时,我遇到了以下情况Java SimpleFramwork XML:包含内部文本和子元素的元素,java,xml,xml-serialization,simple-framework,innertext,Java,Xml,Xml Serialization,Simple Framework,Innertext,在使用无法更改的特定格式的SimpleFramework反序列化xml时,我遇到了以下情况 <Question ID="Q1"> THIS INNER TEXT IS THE ISSUE <Criteria Type="Normal" Source="OEM"> <Value Type="0">45.7</Value> <Value Type="100">42.7</Value&g
<Question ID="Q1">
THIS INNER TEXT IS THE ISSUE
<Criteria Type="Normal" Source="OEM">
<Value Type="0">45.7</Value>
<Value Type="100">42.7</Value>
</Criteria>
<Criteria Type="Impact" Source="OEM">
<Value Type="0">45.7</Value>
<Value Type="100">42.7</Value>
</Criteria>
<!-- CRITERIA CAN HAVE ANY NUMBER -->
</Question>
这个内部文本就是问题所在
45.7
42.7
45.7
42.7
这是我为这个问题写的课
@Root (name="Question")
public class Question {
@Attribute (name="ID")
private String id;
@ElementList (inline=true, required=false)
private List<Criteria> criteria;
@Text
private String text;
// And their getter and setters...
}
@Root(name=“Question”)
公开课问题{
@属性(name=“ID”)
私有字符串id;
@ElementList(inline=true,required=false)
私人名单标准;
@正文
私有字符串文本;
//还有他们的能手和二传手。。。
}
现在的问题是,我无法获取内部文本…
有谁能给我建议一下这样做的方法吗…?你不能在这里使用
@Text
注释,这只有在你没有孩子的情况下才可能
而且它[@Text
annotation]不能和其他XML元素注释一起出现,例如
作为元素
注释
资料来源:
但是,您可以使用转换器来转换这些文本。这有点棘手,但这里有一个例子:
标准
等级:
请注意所有这些空构造函数。它们是simple需要的,但您可以将它们保密。您不必将这些内部类实现为内部类
解决方案的关键是转换器
,它允许您同时使用文本和子元素。您可以使用序列化程序
编写所有条件
-child
有一些toString()
方法,它们仅用于测试-您可以根据需要实现它们
输入XML:
<Question ID="Q1">This inner text ...
<Criteria Type="Normal" Source="OEM">
<Value Type="0">45.7</Value>
<Value Type="100">42.7</Value>
</Criteria>
<Criteria Type="Impact" Source="OEM">
<Value Type="0">45.7</Value>
<Value Type="100">42.7</Value>
</Criteria>
</Question>
Serializer ser = new Persister(new AnnotationStrategy()); // Don't miss the AnnotationStrategy!
Question q = ser.read(Question.class, f);
System.out.println(q);
Question{id=Q1, text=This inner text ...
, criteria=[Criteria{type=Normal, source=OEM, values=[Value{type=0, value=45.7}, Value{type=100, value=42.7}]}, Criteria{type=Impact, source=OEM, values=[Value{type=0, value=45.7}, Value{type=100, value=42.7}]}]}
输出:
<Question ID="Q1">This inner text ...
<Criteria Type="Normal" Source="OEM">
<Value Type="0">45.7</Value>
<Value Type="100">42.7</Value>
</Criteria>
<Criteria Type="Impact" Source="OEM">
<Value Type="0">45.7</Value>
<Value Type="100">42.7</Value>
</Criteria>
</Question>
Serializer ser = new Persister(new AnnotationStrategy()); // Don't miss the AnnotationStrategy!
Question q = ser.read(Question.class, f);
System.out.println(q);
Question{id=Q1, text=This inner text ...
, criteria=[Criteria{type=Normal, source=OEM, values=[Value{type=0, value=45.7}, Value{type=100, value=42.7}]}, Criteria{type=Impact, source=OEM, values=[Value{type=0, value=45.7}, Value{type=100, value=42.7}]}]}
不是很漂亮,但它在工作!:-)
由于转换器的两种方法都已实现,您也可以使用此代码序列化问题
对象。我也遇到了类似的问题,但我的情况完全不同。。。