2012-06-12 42 views
9

Tôi đang cố gắng xây dựng một tài liệu XML bằng cách sử dụng một không gian tên cụ thể. Tài liệu cuối cùng mà tôi đang cố gắng tạo ra được cho là giống như sau:Làm cách nào để thêm tiền tố không gian tên vào đối tượng DOM XML?

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

Đây là những gì tôi có cho đến nay.

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) 

Vì lý do nào đó khi tôi chạy giản đồ trên, không có tiền tố. Như được hiển thị bên dưới:

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

Tôi cần làm gì để XML chính xác như trong ví dụ XML đầu tiên với tiền tố không gian tên và các thẻ để có tiền tố không gian tên?

Tôi đang cố gắng tạo chuỗi XML sẽ được sử dụng cho dịch vụ web Spring-WS, dự kiến ​​đối tượng JAXB có định dạng được hiển thị trong ví dụ đầu tiên.

+0

Xin lưu ý rằng có nhiều triển khai khác nhau của giao diện 'javax.xml.transform.Transformer' hoạt động khác nhau về mặt này. Từ kinh nghiệm gần đây của tôi, hóa ra org.apache.xalan.transformer.TransformerImpl sẽ tạo ra kết quả tương tự như kết quả của bạn. Trong khi sử dụng com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl sẽ tạo kết quả chính xác như bạn mong đợi (nhưng sẽ không sử dụng tiền tố). –

Trả lời

12

Bạn có thể sử dụng setPrefix.

Nhưng nó là tốt hơn để tạo ra các phần tử gốc như thế này:

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

Cũng lưu ý rằng qua null để createElement là một cách hỗ trợ buộc một không gian tên null. Trong ví dụ ban đầu của bạn, tuy nhiên điều này sẽ không hoạt động bởi vì phần tử tài liệu của bạn có hiệu quả buộc không gian tên mặc định bằng cách kết hợp một URI không gian tên không có tiền tố.

Các vấn đề liên quan