2012-06-12 16 views
9

私は特定の名前空間を使用してXML文書を構築しようとしています。私は生成しようとしています最終文書は、このように見えるようになっている。ここでXML DOMオブジェクトに名前空間接頭辞を追加するにはどうすればよいですか?

<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が正確で行う必要がありますか?

最初の例に示す形式のJAXBオブジェクトが必要なSpring-WS Webサービスに使用されるXML文字列を作成しようとしています。

+0

この点で異なって動作する 'javax.xml.transform.Transformer'インターフェースの実装はさまざまです。私の最近の経験から、org.apache.xalan.transformer.TransformerImplはあなたのものと似た結果を生み出すことが判明しました。 com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImplを使用すると、期待通りの結果が得られます(ただし、プレフィックスは使用されません)。 –

答えて

12

setPrefixを使用できます。

しかし、このようなルート要素を作成した方がよい:createElementnullを渡すとnullの名前空間を強制的にサポートされている方法であることも

document.createElementNS("http://www.myschema.com", "m:documentObject"); 

注意を。元の例では、これはうまくいきません。なぜなら、ドキュメント要素は、プレフィックスを持たない名前空間URIを組み合わせることによって、実際にデフォルトの名前空間を強制するからです。

関連する問題