Есть кастомный xml парсер. В результате парсинга получаеться дерево, все ноды дерева лежат в
ListMultimap<String, Node>
, где ключ это путь к ноде, например, "/project/dependencies/dependency".
Дерево предоставляет возможность делать 2 типа запросов:
1. Сходить за текстовым контентом конкретной ноды
String artifactId = xmlTree.selectText("/project/artifactId");
2. Сходить за листом нод
List<Node> dependencies = xmlTree.selectNodes("/project/dependencies/dependency");
Теперь нужно уметь выбирать ноды по конкретным условиям, например:
List<Node> testDeps = tree.selectNodes("/project/dependencies/dependency[scope=test]");
Можно было бы заняться своим велосипедом но сроки поджимают!
Я пока придумал только 2 варианта:
1. Реализовать com.w3c.dom по минимуму и делегировать существующим деревом (но не уверен успею ли)
2. Парсить файл еще раз другим парсером и
мапить все результаты xpath запросов в ноды "нашего" дерева.
btw если у Вас есть вопрос почему просто не юзать парсер для xml -> потому что очень важно не ламать форматинг и существующую структуру файла при апдейтах, сдесь 90% парсеров сразу не подходят, а остальные 10% не подходят по лицензии.