1

私は、XMLドキュメントをトラバースし、各要素をデータHashMapに配置して、それを返すことができるヘルパーメソッドを作成しているところです。これが私が取り組んできた方法です:

private static HashMap<String, String> traverseNodes( Node n, HashMap<String,String> data ) 
{
    NodeList children = n.getChildNodes();
    if( children != null ) {
      for( int i = 0; i < children.getLength(); i++ ) {
        Node childNode = children.item( i );

        String nodeName = childNode.getNodeName();
        if(childNode instanceof Element)
        {
            data.put(nodeName, getStringByTag(nodeName, (Element)childNode));
            Log.d("traversal", childNode.getNodeName() + " was saved in hashmap");
        }


        else
            Log.d("traversal", childNode.getNodeName() + " Is not an Element type");

        System.out.println( "node name = " + childNode.getNodeName() );
        traverseNodes( childNode, data );
      }
    }

    return data;

}

例を実行してみましたが、「childNode.getNodeName()+」がハッシュマップに保存されました」というメッセージが表示されますが、返されたハッシュマップは空です。

私は何が間違っているのですか?

編集!ボーナス質問:提案された変更を反映するようにコードを編集しました。ただし、メソッド自体はXMLドキュメントの値を保存しないようです。メソッドのロジックに問題はありますか?

4

4 に答える 4

4

呼び出しごとに新しいマップを作成しています。既存のマップを再帰呼び出しに渡す必要があります。おそらく次のようになります。

private static Map<String, String> traverseNodes(Node n) {
    Map<String, String> map = new HashMap<String, String>();
    traverseNodesRecurse(n, map);
    return map;
}

private static void traverseNodesRecurse(Node n, Map<String, String> map) {
    // Logic as per question
    // Recursive call (in the loop, etc)
    traverseNodes(childNode, map);

    // No need for a return statement
}
于 2012-06-21T06:37:16.360 に答える
0

私はメソッドの外にとどまり、それを引数として渡すと言いHashMapます-

private static HashMap<String, String> traverseNodes( Node n, HashMap<String, String> data  ) 
于 2012-06-21T06:37:41.297 に答える
0

私はあなたがそのようなものが必要だと思います

private static HashMap<String, String> traverseNodes( Node n ) {
    HashMap<String, String> data = new HashMap<String, String>();
    traverseNodes( n, data );
    return data;
}

private static void traverseNodes( Node n, HashMap<String, String> data ) {
    // Here is your recursive code that do data.put(key, value)
}
于 2012-06-21T06:41:18.940 に答える
0
private static HashMap<String, String> data = new HashMap<String, String>();

private static traverseNodes( Node n) 
{
    NodeList children = n.getChildNodes();
    if( children != null ) {
      for( int i = 0; i < children.getLength(); i++ ) {


        Node childNode = children.item( i );

        if(childNode instanceof Element)
        {

            String nodeName = childNode.getNodeName();
            data.put(nodeName, getStringByTag(nodeName, (Element)childNode));
            Log.d("traversal", childNode.getNodeName() + " was saved in hashmap");
        }


        else
            Log.d("traversal", childNode.getNodeName() + " Is not an Element type");

        System.out.println( "node name = " + childNode.getNodeName() );
        traverseNodes( childNode);
      }
    }

    return data;

}
于 2012-06-21T07:22:42.960 に答える