I want to declare namespace prefix in the Envelope element (i.e.
xmlns:xsi and xmlns:xsd) so that the document will be serialized to
look like the following. However, I don't know the right way to do
that in Java.
<?xml version='1.0' encoding='UTF-8'?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV='http://schemas.xmlsoap.org/soap/envelope/'
xmlns:xsi='http://www.w3.org/1999/XMLSchema-instance'
xmlns:xsd='http://www.w3.org/1999/XMLSchema'>
<SOAP-ENV:Body>
<ns1:doSpellingSuggestion
xmlns:ns1='urn:GoogleSearch'
SOAP-ENV:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'>
<key xsi:type='xsd:string'>mykey</key>
<phrase xsi:type='xsd:string'>word2check</phrase>
</ns1:doSpellingSuggestion>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Currently, my program is as follows:
....
Document doc =
impl.createDocument("http://schemas.xmlsoap.org/soap/envelope/",
"SOAP-ENV:Envelope",
null);
Element root = doc.getDocumentElement();
/* I doubt this is the right way to declare namespace prefix */
root.setAttribute("xmlns:xsi",
"http://www.w3.org/1999/XMLSchema-instance");
root.setAttribute("xmlns:xsd", "http://www.w3.org/1999/XMLSchema");
Element body =
doc.createElementNS("http://schemas.xmlsoap.org/soap/envelope/",
"SOAP-ENV:Body");
root.appendChild(body);
Element doSpellingSuggestion = doc.createElementNS("urn:GoogleSearch",
"ns1:doSpellingSuggestion");
doSpellingSuggestion.setAttributeNS("http://schemas.xmlsoap.org/soap/envelope/",
"SOAP-ENV:encodingStyle",
"http://schemas.xmlsoap.org/soap/encoding/");
body.appendChild(doSpellingSuggestion);
Element key = doc.createElement("key");
/ * well, i can use setAttribute() to get rid of the extra namespace in
the output, but is there a better way?*/
key.setAttributeNS("http://www.w3.org/1999/XMLSchema-instance",
"xsi:type", "xsd:string");
doSpellingSuggestion.appendChild(key)
....
And the output looks like
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/1999/XMLSchema"
xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"><SOAP-ENV:Body><ns1:doSpellingSuggestion
xmlns:ns1="urn:GoogleSearch"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><key
xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
xsi:type="xsd:string">mykey</key><phrase
xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
xsi:type="xsd:string">word2check</phrase></ns1:doSpellingSuggestion></SOAP-ENV:Body></SOAP-ENV:Envelope>
How do I get rid of the superfluous namespace thingy in the <key> and
<phrase> element? Thanks a lot!