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);
}
}
}