这是一个快速的DOM示例,显示了如何使用dtd读写简单的xml文件:
<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE roles SYSTEM "roles.dtd"><roles> <role1>User</role1> <role2>Author</role2> <role3>Admin</role3> <role4/></roles>
和dtd:
<?xml version="1.0" encoding="UTF-8"?><!ELEMENT roles (role1,role2,role3,role4)><!ELEMENT role1 (#PCDATA)><!ELEMENT role2 (#PCDATA)><!ELEMENT role3 (#PCDATA)><!ELEMENT role4 (#PCDATA)>
首先导入这些:
import javax.xml.parsers.*;import javax.xml.transform.*;import javax.xml.transform.dom.*;import javax.xml.transform.stream.*;import org.xml.sax.*;import org.w3c.dom.*;
这是你需要的一些变量:
private String role1 = null;private String role2 = null;private String role3 = null;private String role4 = null;private ArrayList<String> rolev;
这是一个阅读器(字符串xml是你的xml文件的名称):
public boolean readXML(String xml) { rolev = new ArrayList<String>(); document dom; // Make an instance of the documentBuilderFactory documentBuilderFactory dbf = documentBuilderFactory.newInstance(); try { // use the factory to take an instance of the document builder documentBuilder db = dbf.newdocumentBuilder(); // parse using the builder to get the DOM mapping of the // XML file dom = db.parse(xml); Element doc = dom.getdocumentElement(); role1 = getTextValue(role1, doc, "role1"); if (role1 != null) { if (!role1.isEmpty()) rolev.add(role1); } role2 = getTextValue(role2, doc, "role2"); if (role2 != null) { if (!role2.isEmpty()) rolev.add(role2); } role3 = getTextValue(role3, doc, "role3"); if (role3 != null) { if (!role3.isEmpty()) rolev.add(role3); } role4 = getTextValue(role4, doc, "role4"); if ( role4 != null) { if (!role4.isEmpty()) rolev.add(role4); } return true; } catch (ParserConfigurationException pce) { System.out.println(pce.getMessage()); } catch (SAXException se) { System.out.println(se.getMessage()); } catch (IOException ioe) { System.err.println(ioe.getMessage()); } return false; }And here a writer:public void saveToXML(String xml) { document dom; Element e = null; // instance of a documentBuilderFactory documentBuilderFactory dbf = documentBuilderFactory.newInstance(); try { // use factory to get an instance of document builder documentBuilder db = dbf.newdocumentBuilder(); // create instance of DOM dom = db.newdocument(); // create the root element Element rootEle = dom.createElement("roles"); // create data elements and place them under root e = dom.createElement("role1"); e.appendChild(dom.createTextNode(role1)); rootEle.appendChild(e); e = dom.createElement("role2"); e.appendChild(dom.createTextNode(role2)); rootEle.appendChild(e); e = dom.createElement("role3"); e.appendChild(dom.createTextNode(role3)); rootEle.appendChild(e); e = dom.createElement("role4"); e.appendChild(dom.createTextNode(role4)); rootEle.appendChild(e); dom.appendChild(rootEle); try { Transformer tr = TransformerFactory.newInstance().newTransformer(); tr.setOutputProperty(OutputKeys.INDENT, "yes"); tr.setOutputProperty(OutputKeys.METHOD, "xml"); tr.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); tr.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, "roles.dtd"); tr.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4"); // send DOM to file tr.transform(new DOMSource(dom), new StreamResult(new FileOutputStream(xml))); } catch (TransformerException te) { System.out.println(te.getMessage()); } catch (IOException ioe) { System.out.println(ioe.getMessage()); } } catch (ParserConfigurationException pce) { System.out.println("UsersXML: Error trying to instantiate documentBuilder " + pce); }}getTextValue在这里:
private String getTextValue(String def, Element doc, String tag) { String value = def; NodeList nl; nl = doc.getElementsByTagName(tag); if (nl.getLength() > 0 && nl.item(0).hasChildNodes()) { value = nl.item(0).getFirstChild().getNodevalue(); } return value;}添加一些访问器和更改器,你就完成了!



