2009-11-05 8 views
18

क्या स्टैंडअलोन विशेषता को छोड़ने के लिए ट्रांसफॉर्मर (डीओएम का उपयोग कर एक्सएमएल दस्तावेज़ को क्रमबद्ध करते समय) को बताने का कोई तरीका है?जावा डीओएम + ट्रांसफार्मर का उपयोग करते समय एक्सएमएल घोषणा में स्टैंडअलोन विशेषता को छोड़ना।

पसंदीदा रूप से एक हैक का उपयोग किए बिना, यानी पूरी एक्सएमएल घोषणा को छोड़कर और इसे मैन्युअल रूप से तैयार करना।

मेरे वर्तमान कोड:

Transformer transformer = TransformerFactory.newInstance().newTransformer(); 
transformer.setOutputProperty(OutputKeys.INDENT, "yes"); 
transformer.setOutputProperty(OutputKeys.STANDALONE, "yes"); //Note nothing is changed 

StreamResult result = new StreamResult(new StringWriter()); 
DOMSource source = new DOMSource(document); 
transformer.transform(source, result); 
return result.getWriter().toString(); 

वर्तमान:

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<someElement/> 

उद्देश्य:

<?xml version="1.0" encoding="UTF-8"> 
<someElement/> 

उत्तर

41

यह पता चल ..

ट्रांसफार्मर में परिवर्तन करने के बजाय

,

मैं दस्तावेज़ ऑब्जेक्ट में निम्न जोड़ता हूं।

document.setXmlStandalone(true); 
+3

यह भी क्यों काम करता है? Spec के अनुसार: https://www.w3.org/TR/2004/REC-xml-20040204/#sec-rmd "यदि बाहरी मार्कअप घोषणाएं हैं लेकिन कोई स्टैंडअलोन दस्तावेज़ घोषणा नहीं है, तो मूल्य" नहीं " ऐसा माना जाता है।" यह उत्तर: https://stackoverflow.com/questions/5578645/what-does-the-standalone-directive-mean-in-xml यह भी बताता है कि यदि स्टैंडअलोन विशेषता अनुपलब्ध है तो "नहीं" माना जाता है। फिर document.setXmlStandalone (सत्य) कैसे आते हैं; विशेषता को हटा देता है? – mdzh

0

आप कौन से जावा संस्करण का उपयोग कर रहे हैं और/या एक्सएसएलटी ट्रांसफॉर्मर? सन जावा 1.6.0_16 के साथ, स्टैंडअलोन विशेषता केवल आउटपुट दस्तावेज़ में सेट की जाती है यदि आप आउटपुट प्रॉपर्टी सेट करते हैं और सामग्री भी सही होती है।

+0

मुझे ग्रहण 4.5 (मंगल) से अंतर्निहित जावा 8 एसई का उपयोग कर एक ही समस्या मिलती है। – GreenhouseVeg

2

document.setXmlStandalone(true/false); ठीक काम कर रहा है।

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