java - XMLOutputStream, repairing namespaces, and attributes without namespaces -


एक साधारण कार्य: एक तत्व दो विशेषताओं को लिखें:

  स्ट्रिंग nsURI = "http: //example.com/ "; XMLOutputFactory outF = XMLOutputFactory.newFactory (); OutF.setProperty (XMLOutputFactory.IS_REPAIRING_NAMESPACES, सच है); XMLStreamWriter बाहर = outF.createXMLStreamWriter (System.out); Out.writeStartElement (XMLConstants.DEFAULT_NS_PREFIX, "तत्व", एनएसयूआरआई); Out.writeAttribute ("विशेषता", "मूल्य"); आउट.लिखित गुण ("विशेषता 2", "मूल्य"); out.writeEndElement (); out.close ();  

वुडस्टॉक्स का जवाब:

  & lt; element xmlns = "http://example.com/" विशेषता = "मान" विशेषता 2 = "मान" & gt ; & lt; / तत्व & gt;  

जेडीके 6 उत्तर:

  & lt; zdef-1905523464: तत्व xmlns = "" xmlns: zdef-1905523464 = "http://example.com / "विशेषता =" मान "विशेषता 2 =" मूल्य "& gt; & lt; / zdef-1905523464: तत्व & gt;  

क्या?!

इसके अलावा, यदि हम तत्व के लिए एक उपसर्ग जोड़ते हैं:

  out.writeStartElement ("ns", "तत्व", एनएसयूआरआई);  

जेडीके 6 अब xmlns = "" का उत्सर्जन करने का प्रयास नहीं करता है:

  & lt; ns: element xmlns: ns = "http://example.com / "विशेषता =" मान "विशेषता 2 =" मूल्य "& gt; & lt; / ns: तत्व & gt;  

और अगर हम एक विशेषता छोड़ते हैं (यानी केवल एक है) यह ठीक है।

मुझे पूरा यकीन है कि यह जेडीके 6 में एक बग है। क्या मैं सही हूँ? और क्या कोई ऐसा काम सुझा सकता है जिससे कि दोनों पुस्तकालयों (और कोई अन्य) खुश रहें? मैं woodstox की आवश्यकता नहीं है अगर मैं मदद कर सकता हूँ।

मुझे लगता है कि आपको < कोड> XMLStreamWriter डिफ़ॉल्ट नेमस्पेस क्या है, और तब तत्वों को जोड़ते समय इसका उपयोग करें:

  स्ट्रिंग nsURI = "http://example.com/"; XMLOutputFactory outF = XMLOutputFactory.newFactory (); OutF.setProperty (XMLOutputFactory.IS_REPAIRING_NAMESPACES, सच है); XMLStreamWriter बाहर = outF.createXMLStreamWriter (System.out); out.setDefaultNamespace (nsURI); बाहर। WriteStartElement (एनएसयूआरआई, "तत्व"); Out.writeAttribute ("विशेषता", "मूल्य"); आउट.लिखित गुण ("विशेषता 2", "मूल्य"); out.writeEndElement (); out.close ();  

उपरोक्त कोड मुझे यह आउटपुट देता है:

  & lt; element xmlns = "http://example.com/" विशेषता = "मान" विशेषता 2 = "का मान" & gt; & lt; / तत्व & gt;  

जावा संस्करण "1.6.0_20"

के साथ

Comments