import java.io.IOException; import java.io.StringReader; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.jdom.Document; import org.jdom.Element; import org.jdom.Namespace; import org.jdom.input.SAXBuilder; import org.jdom.output.XMLOutputter; import org.xml.sax.EntityResolver; import org.xml.sax.InputSource; import org.xml.sax.SAXException; /** * @author Per Norrman * */ public class FragmentParser { private String _xml; private SAXBuilder _builder; private String _fragment = null; public FragmentParser(Namespace[] namespaces) { StringBuffer buf = new StringBuffer(); buf.append( "]>&fragment;"); _xml = buf.toString(); _builder = new SAXBuilder(); _builder.setEntityResolver(new EntityResolver() { public InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException { if (_fragment != null) { return new InputSource(new StringReader(_fragment)); } else { return null; } } }); } public List parseFragment(String fragment) throws Exception { try { _fragment = fragment; Document doc = _builder.build(new StringReader(_xml)); ArrayList list = new ArrayList(doc.getRootElement().getChildren()); for (Iterator i = list.iterator(); i.hasNext();) { ((Element)i.next()).detach(); } _fragment = null; return list; } catch (Exception e) { throw e; } finally { _fragment = null; } } public static void main(String[] args) throws Exception, Exception { String[] testFragments = { "", "" }; Namespace[] nslist = new Namespace[] { Namespace.getNamespace("erm", "xyz:abc"), Namespace.getNamespace("p", "xyz:def")}; FragmentParser fp = new FragmentParser(nslist); for (int i = 0; i < testFragments.length; i++) { Document doc = new Document(new Element("new")); System.out.println("--> " + testFragments[i]); List l = fp.parseFragment(testFragments[i]); for (Iterator iter = l.iterator(); iter.hasNext();) { Element e = (Element)iter.next(); doc.getRootElement().addContent(e); } XMLOutputter out = new XMLOutputter(); out.output(doc, System.out); } } }