83 lines
2.2 KiB
Java
83 lines
2.2 KiB
Java
package eu.dnetlib.xml.database.exist;
|
|
|
|
import java.io.IOException;
|
|
import java.io.StringReader;
|
|
import java.io.StringWriter;
|
|
|
|
import javax.xml.parsers.DocumentBuilder;
|
|
import javax.xml.parsers.DocumentBuilderFactory;
|
|
import javax.xml.parsers.ParserConfigurationException;
|
|
|
|
import org.apache.xml.serialize.OutputFormat;
|
|
import org.apache.xml.serialize.XMLSerializer;
|
|
import org.w3c.dom.Document;
|
|
import org.xml.sax.InputSource;
|
|
import org.xml.sax.SAXException;
|
|
|
|
/**
|
|
* Exist has an internal DOM implementation.
|
|
*
|
|
* @author marko
|
|
*
|
|
*/
|
|
@SuppressWarnings("deprecation")
|
|
public class ExistDOMConverter {
|
|
|
|
/**
|
|
* convert a DOM document to InputSource on which you can run an XPath.
|
|
*
|
|
* The internal eXist DOM implementation has some problems.
|
|
*
|
|
* @param input
|
|
* DOM document
|
|
* @return sax input source
|
|
* @throws IOException
|
|
* happens ?
|
|
*/
|
|
public InputSource asInputSource(final Document input) throws IOException {
|
|
return new InputSource(new StringReader(asString(input)));
|
|
}
|
|
|
|
/**
|
|
* serialize a dom document to a string.
|
|
*
|
|
* TODO: avoid using deprecated XMLSerializer
|
|
*
|
|
* cannot use Transformer because eXist DOM impl is incomplete.
|
|
*
|
|
* @param input
|
|
* DOM document
|
|
* @return sax input source
|
|
* @throws IOException
|
|
* happens ?
|
|
*/
|
|
|
|
public String asString(final Document input) throws IOException {
|
|
final StringWriter writer = new StringWriter();
|
|
|
|
new XMLSerializer(writer, new OutputFormat()).serialize(input.getDocumentElement());
|
|
|
|
return writer.toString();
|
|
}
|
|
|
|
/**
|
|
* convert a DOM document to a w3c DOM Document on which you can run an XPath.
|
|
*
|
|
* The internal eXist DOM implementation has some problems.
|
|
*
|
|
* @param input
|
|
* input eXist DOM document
|
|
* @return good DOM document
|
|
* @throws IOException
|
|
* happens
|
|
* @throws ParserConfigurationException
|
|
* happens
|
|
* @throws SAXException
|
|
* happens
|
|
*/
|
|
public Document asDocument(final Document input) throws IOException, ParserConfigurationException, SAXException {
|
|
final DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
|
|
return builder.parse(asInputSource(input));
|
|
}
|
|
}
|