Groovy: Вызов ключа LinkedHashMap через переменную - PullRequest
0 голосов
/ 25 мая 2020

У меня есть рекурсивная функция для создания карты из xml

def get_map(groovy.xml.slurpersupport.Node Node) {
    nodeRootName = Node.name() 
    if (Node.childNodes().size() == 0) {
        return [(nodeRootName): (Node.text())]
    } else {
        subMap = [(nodeRootName):[]]
        for (subNode in Node.childNodes()) {
            subMap.nodeRootName.add(get_map(subNode))    
        }
        return subMap
    }
}

Но я не могу вызвать функцию как аргумент .add. У меня ошибка: java.lang.NullPointerException: Cannot invoke method add() on null object Как я могу вызвать map.key через переменную в качестве ключа?

Ответы [ 3 ]

1 голос
/ 25 мая 2020

Попробуйте следующее:

subMap[nodeRootName].add(get_map(subNode))
0 голосов
/ 28 мая 2020

Я не знаю, какую версию Groovy вы используете. Не могу найти класс groovy. xml .slurpersupport.Node в версии 2.5.9. Но рассмотрите возможность перемещения карты создания из для l oop.

def get_map(groovy.xml.slurpersupport.Node Node) {
    nodeRootName = Node.name()
    if (Node.childNodes().size() == 0) {
        return [(nodeRootName): (Node.text())]
    } else {
        list = []
        for (subNode in Node.childNodes()) {
            list.add(get_map(subNode))
        }
        return [(nodeRootName):list]
    }
}
0 голосов
/ 27 мая 2020

Работает только эта подкарта. (SubMap.keySet () [0]). Add (get_map (subNode))

...