Java Apache Commons配置基于属性等于value的父级获取属性
我正在使用ApacheCommons配置和XML来配置我的应用程序,但在获取所需的属性时遇到了问题 我有以下XML结构(只是为了理解要点而使用的最小结构): 不幸的是,我的应用程序对这些行星的索引没有任何概念。至少,索引不会是一致的。它们随时都可能发生变化,所以像上面那样通过索引引用它们是不可靠的 所以,我想做的是这样的:Java Apache Commons配置基于属性等于value的父级获取属性,java,xml,apache-commons-config,Java,Xml,Apache Commons Config,我正在使用ApacheCommons配置和XML来配置我的应用程序,但在获取所需的属性时遇到了问题 我有以下XML结构(只是为了理解要点而使用的最小结构): 不幸的是,我的应用程序对这些行星的索引没有任何概念。至少,索引不会是一致的。它们随时都可能发生变化,所以像上面那样通过索引引用它们是不可靠的 所以,我想做的是这样的: config.getProperty("planets.planet[@name=mars].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;
}
}
List planets=config.getList(“planets.planet[@name]”);
字符串地形=”;
对于(int i=0;i
我相信你会明白为什么这是不可取的。现在,我正考虑包装/扩展ApacheCommons配置库以添加此类功能,但我不愿意接受没有更简单的方法来实现这一点
重提问题
我忽略了什么?如何以更简单的方式实现这一点?这个功能根本不存在吗?我发现我可以用一个 这允许我使用XPath获取属性,现在我可以做:
String terrainFile = config.getString("planets/planet[@name='mars']/terrain");
需要注意的一点是,您需要使用ApacheCommonsJXPath库来使用XPathExpressionEngine,否则在尝试创建它时会出现错误
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;
}
}
XMLConfiguration.setDefaultExpressionEngine(new XPathExpressionEngine());
String terrainFile = config.getString("planets/planet[@name='mars']/terrain");