2009-09-06 1 views
0

XML 문서를 만들고 JVM 빌드 라이브러리를 사용하여 들여 쓰기 된 형식으로 인쇄하고 있습니다. 줄 바꿈이 포함 된 문서에서 텍스트 노드가있을 때, 그것은 적절한 위치를 들여 것 대신의 라인의 시작 라인을 감싸는Java : XML 변환, 텍스트 노드의 줄 바꿈, 들여 쓰기가 끊어짐

샘플 코드

ByteArrayOutputStream s; 

s = new ByteArrayOutputStream(); 

Document d = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument(); 
Transformer t = TransformerFactory.newInstance().newTransformer(); 

Element a; 
Text b; 

a = d.createElement("a"); 

String text = "multi\nline\ntext"; 
b = d.createTextNode(text); 

a.appendChild(b); 
d.appendChild(a); 

t.setOutputProperty(OutputKeys.INDENT,"yes"); 
t.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2"); 
t.transform(new DOMSource(d), new StreamResult(s)); 

System.out.println(new String(s.toByteArray())); 

출력

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<a>multi 
line 
text</a> 

원하는 출력

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<a> 
multi 
line 
text 
</a> 

는 각각의 새로운 라인을 만들 수있는 현명한 방법이 있나요 들여 쓰기 된 xml 태그가 시작될 위치에서 시작 하시겠습니까? 뭔가가 텍스트 노드가 옳은 용도가 아니라고 알려줍니다. 더 좋은 점이 있나요?

답변

2

들여 쓰기를 변경하면 실제로 해당 노드의 텍스트 내용이 변경됩니다. XML API를 읽을로 즉

<a> 
multi 
line 
text 
</a> 

텍스트에 여러 선행 공백 발생합니다. 너가 원하는게 그거야 ? 나는 이것이 당신의 질문에 대한 답이 아니라는 것을 알고 있습니다. 그러나 나는 당신이 정말로 들여 쓰기를 유지하기를 원하지는 않습니다. XML 구조에서 더 아래로 들여 쓰기 된 텍스트 노드를 어떻게 다룰 것입니까?

+0

맞아,이 코드는 – Mike

+0

에 cdata와 같은 것을 사용하거나 인코딩을 사용하여 한 줄에 입력 할 수 있습니다. 어쨌든 textnode는 내용을 변경하지 않고도 꽤 인쇄 할 수 없습니다. –