JAVA属性到XML排序

时间:2015-10-09 09:56:30

标签: java xml

我使用JAVA Properties处理XML,我的代码如下:

    Properties properties = new Properties();
    properties.put("TERMINAL_ID","1330");
    properties.put("ACTIVE_STATUS","1");
    properties.put("CARD_ACCEPT","EZ");
    properties.put("CARD_DENIED","LG,JK");
    properties.put("CARD_TIMEOUT","0");
    FileOutputStream outStream = null;
    try {
        outStream = new FileOutputStream(new File("./mod.xml"));
        properties.storeToXML(outStream, new java.util.Date().toString());
        outStream.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

为什么XML文件中的数据输出没有按照它添加到属性的时间进行排序?

输出:

<!-- language: lang-xml -->
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>Fri Oct 09 16:46:46 WIB 2015</comment>
    <entry key="CARD_DENIED">LG,JK</entry>
    <entry key="CARD_ACCEPT">EZ</entry>
    <entry key="ACTIVE_STATUS">1</entry>
    <entry key="CARD_TIMEOUT">0</entry>
    <entry key="TERMINAL_ID">1330</entry>
</properties>

如何使输出如下:

<!-- language: lang-xml -->
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>Fri Oct 09 16:46:46 WIB 2015</comment>
    <entry key="TERMINAL_ID">1330</entry>
    <entry key="ACTIVE_STATUS">1</entry>
    <entry key="CARD_ACCEPT">EZ</entry>
    <entry key="CARD_DENIED">LG,JK</entry>
    <entry key="CARD_TIMEOUT">0</entry>
</properties>

如何实现这一目标的最佳途径? 谢谢。

1 个答案:

答案 0 :(得分:0)

Properties对象是Hashtable的子类,这意味着键的排序基本上是随机的。

但是,XML生成可能使用Map<Object, Object>的密钥遍历方法来生成XML文件,因此您可以覆盖密钥遍历方法来影响订单。

你可以试试这个:

Properties p = new Properties() {
    @Override
    public Set<Object> keySet() {
        return new TreeSet<Object>(super.keySet());
    }
}

这是一个糟糕的主意,因为您依赖于Properties类的实现细节。如果您对XML输出有特定要求,最好使用适当的XML绑定库,如JAXB。