2012-06-12 2 views
9

특정 네임 스페이스를 사용하여 XML 문서를 작성하려고합니다. 생성하려고하는 최종 문서는 다음과 같아야합니다.XML DOM 객체에 네임 스페이스 접두사를 어떻게 추가합니까?

<m:documentObject xmlns:m="http://www.myschema.com"> 
    <sender>token</sender> 
    <receiver>token</receiver> 
    <payload>token</payload> 
</m:documentObject> 

여기까지의 내용이 있습니다.

Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument(); 
Element requestElement = document.createElementNS("http://www.myschema.com", "documentObject"); 

document.appendChild(requestElement); 

Element sender = document.createElement("sender"); 
requestElement.appendChild(sender);  
Text senderText = document.createTextNode("Xmlsender"); 
sender.appendChild(senderText); 

Element receiver = document.createElement("receiver"); 
requestElement.appendChild(receiver);  
Text receiverText = document.createTextNode("Xmlreceiver"); 
receiver.appendChild(receiverText); 

Element payload = document.createElement("payload"); 
requestElement.appendChild(payload);   
Text payloadText = document.createTextNode("Xmlpayload"); 
payload.appendChild(payloadText); 

StringWriter sw = new StringWriter(); 
StreamResult result = new StreamResult(sw); 

DOMSource source = new DOMSource(requestElement); 

TransformerFactory tf = TransformerFactory.newInstance(); 
Transformer transformer = tf.newTransformer(); 
transformer.setOutputProperty(OutputKeys.ENCODING, "utf-8"); 
transformer.transform(source, result); 

String xmlString = sw.toString(); 
System.out.println(xmlString) 

위의 코드를 실행하면 어떤 이유로 접두사없이 스키마가 나옵니다. 아래 그림과 같이 :

<?xml version="1.0" encoding="utf-8"?> 
<documentObject xmlns="http://www.myschema.com"> 
    <sender>Xmlsender</sender> 
    <receiver>Xmlreceiver</receiver> 
    <payload>Xmlpayload</payload> 
</documentObject> 

내가 네임 스페이스 접두사와 네임 스페이스 접두사를 가지고있는 태그 최초의 XML 예제와 같이 그래서 XML이 정확히 어떻게해야합니까?

첫 번째 예제에 표시된 형식의 JAXB 객체를 예상하는 Spring-WS 웹 서비스에 사용할 XML 문자열을 만들려고합니다.

+0

이 점에서 다르게 작동하는'javax.xml.transform.Transformer' 인터페이스의 구현이 다양하다는 점에 유의하십시오. 최근의 경험으로 볼 때 org.apache.xalan.transformer.TransformerImpl은 사용자가 가지고있는 것과 비슷한 결과를 생성합니다. com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl을 사용하면 예상대로 결과를 얻을 수 있지만 접두어는 사용하지 않습니다. –

답변

12

setPrefix을 사용할 수 있습니다.

그러나이 같은 루트 요소 작성하는 것이 더 좋습니다 : createElement에 그 통과 null 널 네임 스페이스를 강제 지원 방법도

document.createElementNS("http://www.myschema.com", "m:documentObject"); 

참고. 원래 예제에서는 문서 요소가 접두사가없는 네임 스페이스 URI를 조합하여 기본 네임 스페이스를 효과적으로 적용하기 때문에 이렇게되지는 않습니다.

관련 문제