Java如何读写xml文件?

我必须读写XML文件。使用Java读写XML文件的最简单方法是什么?

回答:

这是一个快速的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;

}

添加一些访问器和更改器,你就完成了!

以上是 Java如何读写xml文件? 的全部内容, 来源链接: utcz.com/qa/421132.html

回到顶部