1

SnakeYAML と同様のメソッドを使用して、基本的な XMLConfig に取り組んできました。

私は 2 つの問題に遭遇しました: オブジェクトへの多層パスを作成するかどうかわかりません。また、パスから実際のオブジェクトを読み取る方法もわかりません (タイプを指定しない限り、たとえば文字列)。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();
}

これは機能します (そこにない限り、チェックを行ったにもかかわらず NPE を取得しますか?)、ただし、1 つのレイヤーに対してのみ機能します (それが正しい用語である場合)。

例:

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

getString("somestring", null) を使用して、somestring の値を取得できます。

ただし、次のような場合:

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

ノードリストを取得し、それを文字列リストに変換してから、必要なものを取得しない限り、stringまたはstring2を取得する方法はありません。どういうわけか文字列リストを返し、そのリストにすべての結果を追加したいのですが、それは簡単ですが、パスはどうでしょうか? 子をループする回数を知るにはどうすればよいですか? getString("somestrings.string", null) を行う何らかの方法が必要です。

問題 2: 文字列リストを取得できますが、オブジェクトを取得するにはどうすればよいでしょうか? 私はこの方法を持っています:

    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;
}

どうすれば同じことを行い、オブジェクト リストを返すことができるでしょうか? ここで何かを見逃していることは確かです。

4

0 に答える 0