如何在Apache Commons Configuration中使用XPath按值查询XMLConfiguration?

2020年8月28日 36点热度 0条评论

所以我有以下XML文件。

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<omg>
  <configurationCreated>23/05/20 01:19:30</configurationCreated>
  <sites>
    <site>
      <name>qwer1</name>
      <another>lol1</another>
    </site>
    <site>
      <name>qwer2</name>
      <another>lol2</another>
    </site>
  </sites>
</omg>

我正在尝试使用名称
site查询
qwer2,以检查其是否已存在于文件中。我该怎么做呢?

这就是我在Java中尝试过的方法(我有点遵循
guide)。

Parameters parameters = new Parameters();

FileBasedConfigurationBuilder<XMLConfiguration> builder = new FileBasedConfigurationBuilder<XMLConfiguration>(XMLConfiguration.class)
    .configure(parameters
        .xml()
        .setFileName("mahfile.xml")
        .setExpressionEngine(new XPathExpressionEngine()));

builder.setAutoSave(true);

try {
  configuration = builder.getConfiguration();
} catch (ConfigurationException e) {
  return;
}

configuration.getList("omg/sites[site[name='qwer2']]")

不幸的是,我得到的是一个空列表(无法检查它的大小(以便检查其中有多少个站点)),因此查询似乎失败了。我究竟做错了什么?

我还尝试了与
this xpath exerciser一起使用的
omg/sites/site[name='qwer2'],但是在我的代码中没有,我仍然得到一个空列表。

解决方案如下:

好吧,经过大量文档阅读和研究之后,我发现这是计算元素并判断我的xml节点是否已经存在的最佳方法。 configurationsAt()返回xml节点,在这种情况下,这些节点称为“分层配置对象”。

configuration.configurationsAt("//site[name = 'qwer2']").size()