मेरे आवेदन में, मैं एक्सएमएल फाइलों का कुछ हिस्सा बदलता हूं, जो इस तरह से शुरू होता है:जावा के साथ पार्स करते समय दस्तावेज़ तत्व से पहले व्हाइटस्पेस कैसे रखें?
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Id: version control yadda-yadda $ -->
<myElement>
...
<myElement>
से पहले रिक्त रेखा नोट करें। लोड करने, बदलने और सहेजने के बाद, परिणाम सुखदायक से बहुत दूर है:
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Id: version control yadda-yadda $ --><myElement>
...
मुझे पता चला कि टिप्पणी और दस्तावेज़ नोड के बीच व्हाइटस्पेस (एक नई लाइन) DOM में बिल्कुल प्रदर्शित नहीं है। निम्नलिखित स्व-निहित कोड विश्वसनीय रूप से समस्या को पुन: उत्पन्न करता है:
String source =
"<?xml version=\"1.0\" encoding=\"UTF-16\"?>\n<!-- foo -->\n<empty/>";
byte[] sourceBytes = source.getBytes("UTF-16");
DocumentBuilder builder =
DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc =
builder.parse(new ByteInputStream(sourceBytes, sourceBytes.length));
DOMImplementationLS domImplementation =
(DOMImplementationLS) doc.getImplementation();
LSSerializer lsSerializer = domImplementation.createLSSerializer();
System.out.println(lsSerializer.writeToString(doc));
// output: <?xml version="1.0" encoding="UTF-16"?>\n<!-- foo --><empty/>
क्या किसी को यह पता है कि इससे कैसे बचें? अनिवार्य रूप से, मैं आउटपुट इनपुट के समान होना चाहता हूं। (मुझे पता है कि एक्सएमएल घोषणा पुन: उत्पन्न की जाएगी क्योंकि यह डीओएम का हिस्सा नहीं है, लेकिन यह कोई मुद्दा नहीं है।)
मैंने कस्टम आउटपुटस्ट्रीम क्लास का उपयोग करके आउटपुट में हैकिंग समाप्त कर दी जो "-><" के पहले अवसर की तलाश में है और दो न्यूलाइन जोड़ता है; मैं केवल इस स्ट्रीम का उपयोग करता हूं यदि पहला दस्तावेज़ बाल नोड वास्तव में एक टिप्पणी है। अभी भी एक हैक, लेकिन कम से कम अच्छी तरह से encapsulated :-) –
मेरे पास एक ही मुद्दा है। क्या आप कृपया मदद कर सकते हैं? http://stackoverflow.com/questions/30940162/dom-parser-wrong-childnodes-count – user3930361