Java SimpleFramwork 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

在使用无法更改的特定格式的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>
    </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}]}]}
不是很漂亮,但它在工作!:-)

由于转换器的两种方法都已实现,您也可以使用此代码序列化
问题
对象。

我也遇到了类似的问题,但我的情况完全不同。。。