我使用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>
如何实现这一目标的最佳途径? 谢谢。
答案 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。