在Java中创建基于XML的配置

时间:2013-09-07 04:50:15

标签: java xml dom configuration

我一直在使用类似于SnakeYAML的基本XMLConfig。

我遇到了两个问题:我不知道我会找出对象的覆盖层路径,我不知道如何从路径中读取实际对象(除非我告诉它type,例如String)。 我正在使用DOM来解析我的配置文件。

问题1: 好的,所以我得到了这样的东西:

public String getString(String string, String def) {
return getRootElement().getElementsByTagName(string).item(0) == null || getRootElement().getElementsByTagName(string).item(0).getTextContent().equalsIgnoreCase("") ? def : getRootElement().getElementsByTagName(string).item(0).getTextContent();
}

这是有效的(除非它没有,然后即使我做了检查,我得到了一个N​​PE?),但它只适用于1层(如果这是正确的术语)。

示例:

<root>
<somestring>hello!</somestring></root>

我可以使用getString(“somestring”,null)来获取somestring的值。

但是,如果是这样的话:

<root>
<somestrings>
    <string>Hey!</string>
    <string2>Hola!</string>
</somestrings>

我无法获取字符串或字符串2,除非我获得节点列表,将其转换为字符串列表,然后得到我想要的。我想以某种方式返回一个字符串列表,只是添加所有结果,这很容易,但路径呢?我怎么知道循环孩子多少次?我需要一些方法来做getString(“somestrings.string”,null)。

问题2: 所以,我可以获得一个String列表,但是如何获得该对象? 我有这个方法:

    public List<String> getStringList(String string) {
return XMLUtils.NodeListToStringList(getRootElement().getElementsByTagName(string));
}

XMLUtils.NodeListToStringList()是:

public static List<String> NodeListToStringList(NodeList n) {
List<String> toReturn = Lists.newArrayList();
if (n == null) return toReturn;
for (int i = 0; i < n.getLength(); i++) {
    toReturn.add(n.item(i).getTextContent());
}
return toReturn;
}

现在我将如何做同样的事情,但返回一个对象列表? 很确定我错过了这里的一些东西。

0 个答案:

没有答案