删除/替换/组合从父列表<>生成的标记XStream中的对象

时间:2012-05-23 20:07:30

标签: java serialization xml-serialization xstream

我正在使用XStream将java对象转换为XML对象。

一个这样的对象包含一个List<Window> windows变量,生成后会显示:

<windows>
    <Window>
                  <WindowType>Monthly</WindowType>
                  <WindowBegin>
                    <Month>null</Month>
                    <Day>null</Day>
                  </WindowBegin>
                  <WindowEnd>
                    <Month>null</Month>
                    <Day>null</Day>
                  </WindowEnd>
    </Window>
    <Window>
    ....
    </Window>
</windows>

我想知道是否可以阻止List&lt;&gt;正在生成父标记,如下所示:

        <Window>
                      <WindowType>Monthly</WindowType>
                      <WindowBegin>
                        <Month>null</Month>
                        <Day>null</Day>
                      </WindowBegin>
                      <WindowEnd>
                        <Month>null</Month>
                        <Day>null</Day>
                      </WindowEnd>
        </Window>
        <Window>
        ....
        </Window>

This question使用string.replace,但如果此列表位于需要清理的另一个对象中,则会在xml中留下空白。速度是最重要的,所以我想在可能的情况下从XStream中寻找一种方法。

谢谢

1 个答案:

答案 0 :(得分:0)

我可能没有正确地说出问题,但我找到的解决方案(通过XStream)并没有完全删除标记,而是使用隐式命名将父标记与其子标记结合起来。 感谢@Blaise Doughan's优秀的tutorials

例)

列出窗口; 将序列化为:

<windows>
    <Window>
                  <WindowType>Monthly</WindowType>
                  <WindowBegin>
                    <Month>null</Month>
                    <Day>null</Day>
                  </WindowBegin>
                  <WindowEnd>
                    <Month>null</Month>
                    <Day>null</Day>
                  </WindowEnd>
    </Window>
    <Window>
    ....
    </Window>
</windows>

但是补充说:

@XStreamImplicit(itemFieldName="Window")
List<Window> windows;

将序列化为:

        <Window>
                      <WindowType>Monthly</WindowType>
                      <WindowBegin>
                        <Month>null</Month>
                        <Day>null</Day>
                      </WindowBegin>
                      <WindowEnd>
                        <Month>null</Month>
                        <Day>null</Day>
                      </WindowEnd>
        </Window>
        <Window>
        ....
        </Window>