2016-09-13 9 views
0

現在、JDomで既存の行をコメントするのに苦労しています。JDom既存の行をコメントする方法

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? 

とドキュメント:

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

は、私は全体のヘッダをコメントしたいと思いますが、私はどこにも解決策を見つけることができません...

は、私はいくつかのアドバイスやexplainationsを持ってもらえ?

+0

XMLを解析するときに「コメントする」という意味はありませんか? –

答えて

2

ヘッダー要素を、要素の内容を含むCommentに置き換えます。例:

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

出力:書式設定情報を解析中に除去されるので、あなたが、すべての可能な入力のためにJDOMとfromattingを維持することはできません

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

注意。

コメントを含むブロックの周りにコメントを置くことはできません。コメントがすぐに終了するためです。実際、JDOMでは、--はコメントの部分文字列として使用できません。あなたは、単に

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

を使用して、コメントの中にあるものをsubstingsを破る可能性がありますが、あまりにも考慮に<![CDATA[]]>を取る必要があると思いますので、それ以外は、compicatedになるだろう。

+0

大変ありがとうございました; –

+0

ヘッドに既存のコメントがいくつか含まれていれば、それでも機能しますか? –

関連する問題