Remplacez l'élément d'en-tête par un Comment
contenant le contenu de l'élément. Exemple:
XMLOutputter outputter = new XMLOutputter();
outputter.getFormat().setExpandEmptyElements(true);
SAXBuilder jdomBuild = new SAXBuilder();
Document jdomDoc = jdomBuild.build(new ByteArrayInputStream(("<xml_report>\n"
+ "\n"
+ " <header_info>\n"
+ " <bla1></bla1>\n"
+ " <bla2></bla2>\n"
+ " <bla3></bla3>\n"
+ " <bla4></bla4>\n"
+ " <bla5></bla5>\n"
+ " <bla6></bla6>\n"
+ " </header_info>\n"
+ "\n"
+ " <random_things>\n"
+ " <random/>\n"
+ " </random_things>\n"
+ "\n"
+ "</xml_report>").getBytes(StandardCharsets.UTF_8)));
Element root = jdomDoc.getRootElement();
Element header = root.getChild("header_info");
Comment comment = new Comment(outputter.outputString(header));
root.setContent(root.indexOf(header), comment);
outputter.output(jdomDoc, System.out);
Sortie:
<?xml version="1.0" encoding="UTF-8"?>
<xml_report>
<!--<header_info>
<bla1></bla1>
<bla2></bla2>
<bla3></bla3>
<bla4></bla4>
<bla5></bla5>
<bla6></bla6>
</header_info>-->
<random_things>
<random></random>
</random_things>
</xml_report>
Notez que vous ne pouvez pas conserver le fromatting avec JDOM pour toutes les entrées possibles, étant donné que les informations de mise en forme est retirée lors de l'analyse.
Notez également que vous ne pouvez pas mettre un commentaire autour d'un bloc contenant un commentaire, car cela mettrait fin au commentaire plus tôt. En fait, JDOM n'autorise pas --
à se produire en tant que sous-chaîne dans un commentaire. Vous pouvez simplement briser ces substings à l'intérieur commentaires à l'aide
private static final Pattern PATTERN = Pattern.compile("-{2,}");
private static String fix(String string) {
StringBuilder sb = new StringBuilder();
Matcher m = PATTERN.matcher(string);
int lastEnd = 0;
while (m.find()) {
System.out.println(m.group());
sb.append(string.subSequence(lastEnd, m.start())).append('-');
lastEnd = m.end();
for (int i = lastEnd - m.start(); i > 1; i--) {
sb.append(" -");
}
}
if (lastEnd < string.length()) {
sb.append(string.subSequence(lastEnd, string.length()));
}
return sb.toString();
}
Comment comment = new Comment(fix(outputter.outputString(header)));
Tout le reste serait se compicated, puisque vous aurez besoin de prendre <![CDATA[]]>
en compte aussi.
Vous ne comprenez pas ce que vous entendez par "commentant" lors de l'analyse du code XML? –