Próbuję zbudować dokument XML przy użyciu określonego obszaru nazw. Ostateczny dokument, który próbuję wygenerować, powinien wyglądać tak:Jak dodać prefiks przestrzeni nazw do obiektu XML DOM?
<m:documentObject xmlns:m="http://www.myschema.com">
<sender>token</sender>
<receiver>token</receiver>
<payload>token</payload>
</m:documentObject>
Oto, co mam do tej pory.
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)
Z jakiegoś powodu po uruchomieniu powyższego schematu pojawia się bez prefiksu. Jak pokazano poniżej:
<?xml version="1.0" encoding="utf-8"?>
<documentObject xmlns="http://www.myschema.com">
<sender>Xmlsender</sender>
<receiver>Xmlreceiver</receiver>
<payload>Xmlpayload</payload>
</documentObject>
Co muszę zrobić tak, że XML jest dokładnie tak, jak pokazano w pierwszym przykładzie XML z przedrostka przestrzeni nazw i tagów mieć przedrostek przestrzeni nazw?
Próbuję utworzyć ciąg znaków XML, który będzie używany w usłudze Spring-WS, która oczekuje obiektu JAXB, który ma format pokazany w pierwszym przykładzie.
Należy zauważyć, że istnieje wiele różnych implementacji interfejsu 'javax.xml.transform.Transformer', które działają inaczej pod tym względem. Z moich ostatnich doświadczeń wynika, że org.apache.xalan.transformer.TransformerImpl przyniosłoby wynik podobny do tego, jaki masz. Podczas korzystania z pliku com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl można uzyskać wynik dokładnie taki, jak się spodziewasz (ale nie użyje prefiksów). –