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.
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ố). –