我正在使用JAXB,需要生成如下的XML代码:
<?xml version="1.0" encoding="UTF-8" standalone="no"?><!--Created with JFLAP 6.4.-->
<structure>
<type>fa</type>
<automaton>
<!--The list of states.-->
<state id="0" name="q0">
<x>160.0</x>
<y>151.0</y
<initial/> <!-- This what I want-->
</state>
<state id="1" name="q1">
<x>369.0</x>
<y>94.0</y>
<final/> <!-- This what I want-->
</state>
<!--The list of transitions.-->
<transition>
<from>0</from>
<to>1</to>
<read>a</read>
</transition>
</automaton>
</structure>
正如你所看到的,我想知道如何在没有@XmlAttribute的情况下创建一个简单的@XmlElement,但是在我的代码中,我得到了:
private boolean initial = false;
private boolean final = false;
@XmlElement(name="initial")
public void setInitial(boolean val) {
this.initial = val;
}
@XmlElement(name="final")
public void setFinal(boolean val) {
this.final = val;
}
这样,我得到了这样的XML:
<state id="0" name="q0">
<x>0.0</x>
<y>0.0</y>
<final>false</final>
<initial>true</initial>
</state>
<state id="1" name="q1">
<x>0.0</x>
<y>0.0</y>
<final>true</final>
<initial>false</initial>
</state>
有谁知道怎么做?
2 回答
您可以执行以下操作并利用
XmlAdapter
将Boolean
转换为空对象以获取所需的XML表示形式 .Java模型
Root
该属性是
boolean
,但我们将使字段Boolean
,以便我们可以应用XmlAdapter
. 我们还将指定我们希望JAXB映射到该字段(请参阅:http://blog.bdoughan.com/2011/06/using-jaxbs-xmlaccessortype-to.html) .BooleanAdapter
演示代码
下面是一些演示代码,您可以运行以查看一切正常 .
Demo
Output
您可以通过设置空字符串来伪造空节点,为此您需要将
boolean
s转换为String
s .创建一些数据并封送它:
这将输出
请注意
<initial></initial>
与<initial/>
相同,final
相同 .或者,您可以重新考虑状态类型的节点并创建一个元素<state-type>并使用值enum设置它,例如enum StateType {INITIAL,FINAL}或者只是将其设置为字符串initial或final .
EDIT