2012-06-12 10 views
9

मैं एक विशिष्ट नामस्थान का उपयोग कर एक एक्सएमएल दस्तावेज़ बनाने की कोशिश कर रहा हूं। अंतिम दस्तावेज जिसे मैं उत्पन्न करने की कोशिश कर रहा हूं उसे इस तरह दिखना चाहिए:मैं 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> 

क्या मैं इतना है कि एक्सएमएल बिल्कुल के रूप में नामस्थान उपसर्ग और टैग नामस्थान उपसर्ग के लिए के साथ पहली एक्सएमएल उदाहरण में दिखाया गया है क्या करना होगा?

मैं एक एक्सएमएल स्ट्रिंग बनाने की कोशिश कर रहा हूं जिसका उपयोग स्प्रिंग-डब्ल्यूएस webservice के लिए किया जाएगा जो पहले उदाहरण में दिखाए गए प्रारूप में एक जेएक्सबी ऑब्जेक्ट की अपेक्षा करता है।

+0

कृपया ध्यान दें कि 'javax.xml.transform.Transformer' इंटरफेस के कई अलग-अलग कार्यान्वयन हैं जो इस संबंध में अलग-अलग काम करते हैं। अपने हाल के अनुभव से यह पता चला कि org.apache.xalan.transformer.TransformerImpl आपके पास जो कुछ है उसके परिणाम देगा। Com.sun.org.apache.xalan.internal.xsltc.trax का उपयोग करते समय। ट्रांसफॉर्मरइम्पल परिणाम की तरह ही उत्पादन करेगा (लेकिन उपसर्ग का उपयोग नहीं करेगा)। –

उत्तर

12

आप setPrefix का उपयोग कर सकते हैं।

लेकिन यह इस तरह मूल तत्व बनाने के लिए बेहतर है:

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

यह भी ध्यान रखें createElement है कि गुजर null एक अशक्त नाम स्थान के लिए मजबूर कर के समर्थित तरीका है। आपके मूल उदाहरण में हालांकि यह काम नहीं करेगा क्योंकि आपका दस्तावेज़ तत्व बिना किसी उपसर्ग के नामस्थान यूआरआई को जोड़कर डिफ़ॉल्ट नामस्थान को मजबूर करता है।

संबंधित मुद्दे