XML 문서를 문자열로


104

XML 문서 ( org.w3c.dom.Document) 의 문자열 표현을 얻는 가장 간단한 방법은 무엇입니까 ? 그것은 모든 노드가 한 줄에 있다는 것입니다.

예를 들어

<root>
  <a>trge</a>
  <b>156</b>
</root>

(이것은 트리 표현 일 뿐이며 내 코드에서는 org.w3c.dom.Document객체이므로 문자열로 취급 할 수 없습니다)

"<root> <a>trge</a> <b>156</b> </root>"

감사!



답변:


207

doc귀하의 인스턴스가 org.w3c.dom.Document다음 과 같다고 가정 합니다 .

TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
StringWriter writer = new StringWriter();
transformer.transform(new DOMSource(doc), new StreamResult(writer));
String output = writer.getBuffer().toString().replaceAll("\n|\r", "");

12
replaceAll다른 출력 속성을 추가하면 아마 필요가 없습니다 :transformer.setOutputProperty(OutputKeys.INDENT, "no");
bvdb

10
그리고는 writer.getBuffer().toString()바로 할 수 있습니다writer.toString()
bvdb

@bvdb 둘 다 우수한 점. OutputKeys.INDENT줄 을 명시 적으로 추가하는 것에는 추가적인 이점 이 있습니다. 왜냐하면 "yes"원하는 경우 공백을 유지하도록 설정할 수도 있습니다 (제 상황에서는 제거하는 것만 replaceAll으로는 끈).
Jonathan Benn

들여 쓰기가 제대로 작동하도록하는 방법에 대한 설명은 stackoverflow.com/questions/1384802/ 를 참조하십시오.
Jonathan Benn

2

Apache XMLSerializer 사용

예 : http://www.informit.com/articles/article.asp?p=31349&seqNum=3&rl=1

이것도 확인할 수 있습니다

http://www.netomatix.com/XmlFileToString.aspx


Xerces는 믿을 수없는 소스 나 JavaDocs, WTF를 포함하여 여전히 Maven을 통해 공식적으로 배포하지 않고 있습니다. 공식적인 Maven 지원은 사용 중단 해결을 더 어렵게 만들고 일관된 업데이트를 더 번거롭게 만들고 보안 위험을 초래하므로 지금 의존성을 갖는 것은 어리석은 일입니다!
Infernoz

1

먼저 모든 텍스트 노드에서 모든 개행 문자를 제거해야합니다. 그런 다음 ID 변환을 사용하여 DOM 트리를 출력 할 수 있습니다. .NET 용 javadoc을 살펴보십시오 TransformerFactory#newTransformer().

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.