XStream的一些有用的方法

1.addImplicitCollection
  类里面包含一个List变量在读取xml配置的时候是很常见的情况,比如:
有三个类:AuditTrail, AuditTrailEntry, AuditTrailEntryField,要读取的xml:
<AuditTrail>
    <Entry type="ExecutionReport" msgId="2544804979">
        <field tag="35" val="8"/>
        <field tag="34" val="000023"/>
        <field tag="43" val="N"/>
        <field tag="52" val="20090526-20:08:31"/>
        <field tag="6556" val="today12"/>
        <field tag="17" val="73740.1243368511.0"/>
        <field tag="32" val="*"/>
    </Entry>
    <Entry type="Acknowledged" msgId="1540251818">
    </Entry>
</AuditTrail>
如果你仅仅是做类的alias:
XStream xStream = new XStream ();
xStream.alias ("AuditTrail", AuditTrail.class);
xStream.alias ("Entry", AuditTrailEntry.class);
xStream.alias ("field", AuditTrailEntryField.class);
就会抛异常:ConversionException: Element [NAME] of type [TYPE]
                     is not defined as [NAME] in type [TYPE]
解决办法就是addImplicitCollection,它会告诉xstream,有一个隐式的collecton存在:
xStream.addImplicitCollection (AuditTrailEntry.class, "fields");
xStream.addImplicitCollection (AuditTrail.class, "entries");
(其中, List <AuditTrailEntryField> fields定义在 class AuditTrailEntry
List <AuditTrailEntry> entries 定义在 class AuditTrail.)
2.useAttributeFor
设置某个节点显示到父节点的属性中,也就是将指定class中的指定属性,在这个class元素节点的属性中显示。

如:<student><name>hoojo</name></student>

设置好后就是这样的结果:<student name=”hoojo”></student>
3.aliasAttribute
修改属性名称.比如stream.aliasAttribute(NpcAiConfig.class,"aid","id"),表示类NpcAiConfig有一个变量aid,它对应的是xml里面的id属性

你可能感兴趣的:(xstream)