आप सही हैं, मानक XML API के साथ, वहाँ एक अच्छा तरीका नहीं है - यहाँ एक उदाहरण दिया गया है (बग ग्रस्त हो सकता है, यह चलता है, लेकिन मैं इसे एक लंबे समय पहले लिखा था)।
import javax.xml.*;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.*;
import org.w3c.dom.*;
import java.io.*;
public class Proc
{
public static void main(String[] args) throws Exception
{
//Parse the input document
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(new File("in.xml"));
//Set up the transformer to write the output string
TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer();
transformer.setOutputProperty("indent", "yes");
StringWriter sw = new StringWriter();
StreamResult result = new StreamResult(sw);
//Find the first child node - this could be done with xpath as well
NodeList nl = doc.getDocumentElement().getChildNodes();
DOMSource source = null;
for(int x = 0;x < nl.getLength();x++)
{
Node e = nl.item(x);
if(e instanceof Element)
{
source = new DOMSource(e);
break;
}
}
//Do the transformation and output
transformer.transform(source, result);
System.out.println(sw.toString());
}
}
यह प्रतीत होता है तुम सिर्फ doc.getDocumentElement() का उपयोग करके पहला बच्चा हो सकता है की तरह। GetFirstChild(), लेकिन उस के साथ समस्या यह है अगर वहाँ जड़ और बच्चे तत्व के बीच कोई खाली स्थान के है, कि पेड़ में एक पाठ नोड बनाएगा, और आपको वास्तविक तत्व नोड के बजाय उस नोड को प्राप्त होगा। इस कार्यक्रम से उत्पादन होता है:
D:\home\tmp\xml>java Proc
<?xml version="1.0" encoding="UTF-8"?>
<element1>
<child attr1="blah">
<child2>blahblah</child2>
</child>
</element1>
मुझे लगता है कि आप एक्सएमएल संस्करण स्ट्रिंग को दबाने सकते हैं यदि आप इसकी आवश्यकता नहीं है, लेकिन मैं उस पर यकीन नहीं है। यदि संभव हो तो मैं शायद किसी तृतीय पक्ष XML लाइब्रेरी का उपयोग करने का प्रयास करूंगा।
स्रोत
2009-03-10 21:04:09
नहीं, मैं dom4j साथ ऐसा करना चाहते हैं। कोई संकेत ... – user234194