Java-задача с XML
Всем привет!
В сообществе долгое время не было задач, а подписчиков прибавилось, вот я и подумал добавить интересную задачу.
Задание: реализовать функцию со следующей сигнатурой:
Collection<String> folderNames(String xml, char startingLetter)
Она должна принимать на вход строку xml, содержащую XML-структуру, подобную этой:
<?xml version="1.0" encoding="UTF-8"?>
<folder name="c">
<folder name="program files">
<folder name="uninstall information" />
</folder>
<folder name="users" />
</folder>
а также букву startingLetter
В качестве возвращаемого значения должна быть коллекция значений всех аттрибутов name, каждая из которых начинается с буквы startingLetter.
Например, для XML выше, функция должна вернуть коллекцию с "uninstall information" и "users" (порядок не важен).
Решения добавляйте в комментариях (желательно, ссылки на github/pastebin), постараюсь првоести их код-ревью, а через некоторое время выложу свое решение.
Ну и по традиции, кот, из одного известного стикерпака ^_^

например, используем xpath
подробности тут - https://gist.github.com/averkhoglyad/ec2641bfde7c983125007e0...)
шаблон запроса - "//folder[starts-with(@nаme,'%s')]/@nаme" (где %s заменяется на startingLetter)
после чего просто выгребаем все ноды:
XPathFactory.newInstance().newXPath()
.compile(String.format(tpl, startingLetter))
.evaluate(document, XPathConstants.NODESET);
и собираем результат:
int nodesLength = nodes.getLength();
Collection<String> result = new ArrayList<>(nodesLength);
for (int i = 0; i < nodesLength; i++) {
result.add(nodes.item(i).getNodeValue());
}