Относительно просто перебрать NodeList и получить каждый дочерний тип, а затем рекурсивно go в дерево.
public static List<Node> extractComments(final NodeList search) {
List<Node> result = new ArrayList<>();
for (int i = 0, length = search.getLength(); i < length; i++) {
Node child = search.item(i);
if (child.getNodeType() == Node.COMMENT_NODE) {
result.add(child);
}
result.addAll(extractComments(child.getChildNodes()));
}
return result;
}
или если вы просто заинтересованы в необработанных строках ...
public static List<String> extractComments(final NodeList search) {
List<String> result = new ArrayList<>();
for (int i = 0, length = search.getLength(); i < length; i++) {
Node child = search.item(i);
if (child.getNodeType() == Node.COMMENT_NODE) {
result.add(child.getTextContent());
}
result.addAll(extractComments(child.getChildNodes()));
}
return result;
}
Для вашего ввода выше и этого
NodeList result = XPathUtils.allNodes(document, "*/org1");
System.out.println(extractComments(result));
В результате получается
[[#comment: I am a comment ]]
Я также отмечаю ряд синтаксических ошибок на входе вашего источника
<document>
<org1>
<!---- I am a comment -----> <== additional "--" is illegal inside a comment
<somenNode1> hello </somenode1> <== close tag should match open tag
<somenNode2> hello </somenode1> <== close tag should be somenNode2
</org1>
</document>