Estoy intentando construir un documento XML usando un espacio de nombre específico. El documento final que estoy tratando de generar Se supone que este aspecto:¿Cómo agrego un prefijo de espacio de nombres a un objeto XML DOM?
<m:documentObject xmlns:m="http://www.myschema.com">
<sender>token</sender>
<receiver>token</receiver>
<payload>token</payload>
</m:documentObject>
Esto es lo que tengo hasta ahora.
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)
Por alguna razón, cuando ejecuto lo anterior, el esquema sale sin el prefijo. Como se muestra a continuación:
<?xml version="1.0" encoding="utf-8"?>
<documentObject xmlns="http://www.myschema.com">
<sender>Xmlsender</sender>
<receiver>Xmlreceiver</receiver>
<payload>Xmlpayload</payload>
</documentObject>
¿Qué tengo que hacer para que XML es exactamente como se muestra en el primer ejemplo de XML con el prefijo de espacio de nombres y las etiquetas para tener el prefijo de espacio de nombres?
Estoy tratando de crear una cadena XML que se utilizará para un servicio web Spring-WS que espera un objeto JAXB que está en el formato que se muestra en el primer ejemplo.
Tenga en cuenta que hay muchas implementaciones diferentes de la interfaz 'javax.xml.transform.Transformer' que funcionan de manera diferente a este respecto. De mi propia experiencia reciente resultó que org.apache.xalan.transformer.TransformerImpl produciría resultados similares a los que tiene. Si utiliza com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl, obtendrá el resultado exactamente como espera (pero no usará prefijos). –