내 응용 프로그램에서 XML 파일의 일부를 다음과 같이 변경합니다.Java로 파싱 할 때 문서 요소 앞에 공백을 두는 방법은 무엇입니까?
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Id: version control yadda-yadda $ -->
<myElement>
...
<myElement>
앞에 빈 줄을 적어 둡니다. 로드, 변경 및 저장 후 결과는 만족스럽지 않습니다.
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Id: version control yadda-yadda $ --><myElement>
...
주석과 문서 노드 사이의 공백 (하나의 줄 바꿈)이 DOM에 전혀 표시되지 않습니다. 다음 자체 포함 코드는 문제를 안정적으로 재현합니다.
String source =
"<?xml version=\"1.0\" encoding=\"UTF-16\"?>\n<!-- foo -->\n<empty/>";
byte[] sourceBytes = source.getBytes("UTF-16");
DocumentBuilder builder =
DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc =
builder.parse(new ByteInputStream(sourceBytes, sourceBytes.length));
DOMImplementationLS domImplementation =
(DOMImplementationLS) doc.getImplementation();
LSSerializer lsSerializer = domImplementation.createLSSerializer();
System.out.println(lsSerializer.writeToString(doc));
// output: <?xml version="1.0" encoding="UTF-16"?>\n<!-- foo --><empty/>
이 문제를 피하는 방법을 알고 있습니까? 본질적으로, 출력을 입력과 동일하게하고 싶습니다. (xml 선언은 DOM의 일부가 아니기 때문에 다시 생성된다는 것을 알고 있지만 여기서는 문제가 아닙니다.)
"-><"의 첫 번째 발생을 찾고 두 개의 개행을 추가하는 사용자 정의 OutputStream 클래스를 사용하여 출력을 해킹하는 결과가 발생했습니다. 첫 번째 문서 하위 노드가 실제로 주석 인 경우에만이 스트림을 사용합니다. 아직 해킹이되었지만 적어도 깔끔하게 캡슐화 된 :-) –
같은 문제가 있습니다. 도와주세요. http://stackoverflow.com/questions/30940162/dom-parser-wrong-childnodes-count – user3930361