我正在使用带有 XML 的 Apache Commons Configuration 来配置我的应用程序,但在获取我想要的属性时遇到了麻烦。
我有以下 XML 结构(只是为了说明问题的最小结构):
<?xml version="1.0" encoding="UTF-8"?>
<settings>
<planets>
<planet name="mars">
<terrain>terrain/mars.terrain</terrain>
</planet>
<planet name="earth">
<terrain>terrain/earth.terrain</terrain>
</planet>
</planets>
</settings>
据我了解,我在这里获得火星terrain
设置的最佳方法是:
config.getProperty("planets.planet(0).terrain");
不幸的是,我的应用程序没有/不应该有这些行星索引的任何概念。至少,索引不会是一致的。它们可能随时更改,因此如上所述通过索引引用它们是不可靠的。
所以,我想做的是这样的:
config.getProperty("planets.planet[@name=mars].terrain");
正如您可能已经猜到的那样,这不起作用。我发现这样做的唯一其他方法是迟钝且不可接受的:
List<Object> planets = config.getList("planets.planet[@name]");
String terrain = "";
for (int i = 0; i < planets.size(); i++) {
if (planets[i].toString().equals("mars")) {
terrain = config.getString("planets.planet(" + i + ").terrain");
break;
}
}
我相信你可以明白为什么这是不可取的。现在,我正在考虑包装/扩展 Apache Commons 配置库以添加此类功能,但我只是不愿意接受没有更简单的方法可以做到这一点.
重新审视问题
我忽略了什么,如何以更简单的方式完成?这个功能根本不存在吗?