2016-09-13 3 views
0

J'ai actuellement du mal à commenter une ligne existante avec JDom, mieux je voudrais commenter un nœud entier.JDom Comment commenter une ligne existante

SAXBuilder jdomBuild = new SAXBuilder(); 
    jdomDoc = jdomBuild.build(fileLocation); 
    Element root = jdomDoc.getRootElement(); 
    Element header = root.getChild("header_info") 
    // how can I comment the lines now? 

Et le document:

<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> 

Je voudrais commenter l'en-tête ensemble, mais je ne peux pas trouver la solution partout ...

pourrais-je avoir quelques conseils et explications s'il vous plaît ?

+0

Vous ne comprenez pas ce que vous entendez par "commentant" lors de l'analyse du code XML? –

Répondre

2

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.

+0

Fonctionne comme un charme merci beaucoup;) –

+0

cela fonctionnerait-il encore si la tête inclut un commentaire existant? –