2016-09-13 13 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에서는 --이 주석의 하위 문자열로 발생하는 것을 허용하지 않습니다. 당신이 너무 계정으로 <![CDATA[]]>를 취할 필요가 것 때문에 당신은 단순히, 다른

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

뭐든지 compicated 얻을 것이다 사용하여 주석 내부에 그 substings을 깰 수 있습니다.

+0

대단히 감사합니다. –

+0

머리에 몇 가지 기존 설명이 포함되어 있다면 여전히 작동합니까? –