LSParserFilter---载入与保存 应用org.w3c.dom 实现XML的载入与保存实例 /** * 实现DOM3的LS(Load & Save)功能 * * @author S.Well * @see org.w3c.dom.DOMErrorHandler * @see org.w3c.dom.ls.LSParserFilter */ public class XML_LS implements DOMErrorHandler, LSParserFilter { private static final Logger logger = Logger.getLogger(XML_LS.class .getName()); private static DOMImplementationRegistry registry; private static LSParser builder; private static DoBeanXmlTest errorHandler; private static DOMImplementationLS impl; private static LSOutput dOut; private static LSInput dIn; private static LSSerializer domWriter; private Document document; public XML_LS() { // 这一句是转换使用Xerces包 // System.setProperty(DOMImplementationRegistry.PROPERTY,"org.apache.xerces.dom.DOMXSImplementationSourceImpl"); try { registry = DOMImplementationRegistry.newInstance(); impl = (DOMImplementationLS) registry.getDOMImplementation("LS"); domWriter = impl.createLSSerializer(); DOMConfiguration config = domWriter.getDomConfig(); config.setParameter("xml-declaration", Boolean.TRUE); dOut = impl.createLSOutput(); dIn = impl.createLSInput(); // ======================================================== // ====================create DOMBuilder================== builder = impl.createLSParser(DOMImplementationLS.MODE_SYNCHRONOUS, null); // create filter LSParserFilter filter = new DoBeanXmlTest(); builder.setFilter(filter); config = builder.getDomConfig(); // create Error Handler errorHandler = new DoBeanXmlTest(); // set error handler config.setParameter("error-handler", errorHandler); // set validation feature config.setParameter("validate", Boolean.TRUE); // set schema language config.setParameter("schema-type", "http://www.w3.org/2001/XMLSchema"); // config.setParameter("psvi", Boolean.TRUE); // config.setParameter("schema-type", // "http://www.w3.org/TR/REC-xml"); // set schema location config .setParameter("schema-location", "E:/java/source/HibernateTutorial/test/filesys/template/spring-beans-2.5.xsd"); } catch (ClassCastException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 从文件XML载入DOM * * @param xmlURI */ public boolean load(String xmlURI) { document = builder.parseURI(xmlURI); if(document == null){ return false; } return true; } public boolean load(File file) { try { InputStream in; in = new FileInputStream(file); dIn.setByteStream(in); document = builder.parse(dIn); return true; } catch (FileNotFoundException e) { e.printStackTrace(); } return false; } /** * 保存DOM至文件 */ public boolean save(String xmlURI) { // serialize document to file File outFile = new File(xmlURI); if (save(outFile)) { return true; } return false; } public boolean save(File xmlURI) { try { OutputStream out; out = new FileOutputStream(xmlURI); dOut.setByteStream(out); domWriter.write(document, dOut); return true; } catch (FileNotFoundException e) { e.printStackTrace(); } return false; } /** * 打印DOM树 */ public void print() { // serialize document to standard output dOut.setByteStream(System.out); domWriter.write(document, dOut); } /** * @return 返回经load()后的DOM */ public Document getDocument() { return this.document; } public void setDocument(Document document) { this.document = document; } /* (non-Javadoc) * @see org.w3c.dom.DOMErrorHandler#handleError(org.w3c.dom.DOMError) */ @Override public boolean handleError(DOMError error) { short severity = error.getSeverity(); if (severity == DOMError.SEVERITY_ERROR) { // System.out.println("[dom3-error]: " + error.getMessage()); logger.error(error.getMessage()); } if (severity == DOMError.SEVERITY_WARNING) { // System.out.println("[dom3-warning]: " + error.getMessage()); logger.error(error.getMessage()); } return true; } /* (non-Javadoc) * @see org.w3c.dom.ls.LSParserFilter#acceptNode(org.w3c.dom.Node) */ @Override public short acceptNode(Node nodeArg) { return NodeFilter.FILTER_ACCEPT; } /* (non-Javadoc) * @see org.w3c.dom.ls.LSParserFilter#getWhatToShow() */ @Override public int getWhatToShow() { return NodeFilter.SHOW_ELEMENT; } /* (non-Javadoc) * @see org.w3c.dom.ls.LSParserFilter#startElement(org.w3c.dom.Element) */ @Override public short startElement(Element elementArg) { return LSParserFilter.FILTER_ACCEPT; } }