我正在尝试使用特定命名空间构建 XML 文档。我尝试生成的最终文档应该如下所示:
<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 示例中所示的完全一样,带有命名空间前缀和带有命名空间前缀的标签?
我正在尝试创建一个 XML 字符串,该字符串将用于 Spring-WS web 服务,该服务需要一个 JAXB 对象,该对象的格式如第一个示例所示。
最佳答案
您可以使用 setPrefix
.
但最好像这样创建根元素:
document.createElementNS("http://www.myschema.com", "m:documentObject");
另请注意,将 null
传递给 createElement
是一种强制使用 null 命名空间的受支持方式。但是,在您的原始示例中,这不起作用,因为您的文档元素通过组合没有前缀的命名空间 URI 有效地强制使用默认命名空间。
关于java - 如何向 XML DOM 对象添加命名空间前缀?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10995338/