Как добавить префикс пространства имен к объекту XML DOM?
Я пытаюсь создать 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, которая ожидает, что объект JAXB находится в формате, показанном в первом примере.
Ответы
Ответ 1
Вы можете использовать setPrefix
.
Но лучше создать корневой элемент следующим образом:
document.createElementNS("http://www.myschema.com", "m:documentObject");
Обратите также внимание, что передача null
в createElement
является поддерживаемым способом принудительного пустого пространства имен. В вашем исходном примере это, однако, не будет работать, потому что ваш элемент документа эффективно заставляет пространство имен по умолчанию объединять URI пространства имен без префикса.
Ответ 2
Как бы получить этот префикс, генерирующий из объекта?
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.datacontract.org/2004/07/DealerTrack.DataContracts.CreditApp")]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "http://schemas.datacontract.org/2004/07/DealerTrack.DataContracts.CreditApp", IsNullable = false)]
public partial class ApplicantInfo
{}
Я получаю это:
<ApplicantInfo xmlns="http://schemas.datacontract.org/2004/07/DealerTrack.DataContracts.CreditApp">
Я хочу этот:
<ApplicantInfo xmlns:a="http://schemas.datacontract.org/2004/07/DealerTrack.DataContracts.CreditApp">