xml文件的插入和删除结点
如题,本人初学,自己依样画葫芦写的程序老是出错。所以在这里求一个写入和删除结点的例子,谢谢各位哥哥姐姐。
[解决办法]
下面是XML文件读写的例子,删除NODE我也不懂.希望能给你提供点帮助.
package XMLTest;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;
import java.util.Vector;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.DOMException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.w3c.dom.Text;
//为了保存多个学生信息,还得借助一个集合类(并不是单纯意义上的集合,JAVA中的集合是集合框架的概念,包含向量、列表、哈希表等),
//这里采用Vector向量类。定义在XMLTest测试类中,命名为student_Vector。然后定义两个方法readXMLFile和writeXMLFile,实现读写操作。代码如下:
public class XMLTest {
Vector student_Vector;
private void readXMLFile(String inFile) throws Exception {
// 建立一个解析器工厂DocumentBuilderFactory,以利用这个工厂来获得一个具体的解析器对象DocumentBuilder
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = null;
try {
db = dbf.newDocumentBuilder();
} catch (ParserConfigurationException pce) {
System.err.println(pce);
// 出异常时输出异常信息,然后退出,下同
System.exit(1);
}
Document doc = null;
try {
doc = db.parse(inFile);
} catch (DOMException dom) {
System.err.println(dom.getMessage());
System.exit(1);
} catch (IOException ioe) {
System.err.println(ioe);
System.exit(1);
}
// 下面是解析XML的全过程,
// 比较简单,先取根元素 "students "
Element root = doc.getDocumentElement();
// 取 "学生 "元素列表
NodeList students = root.getElementsByTagName( "student ");
for (int i = 0; i < students.getLength(); i++) {
// 依次取每个 "学生 "元素
Element student = (Element) students.item(i);
// 创建一个学生的Bean实例
StudentBean studentBean = new StudentBean();
// 取学生的性别属性
studentBean.setSex(student.getAttribute( "sex "));
// 取 "姓名 "元素,下面类同
System.out.println(student.getAttribute( "sex "));
NodeList names = student.getElementsByTagName( "name ");
if (names.getLength() == 1) {
Element e = (Element) names.item(0);
Text t = (Text) e.getFirstChild();
studentBean.setName(t.getNodeValue());
System.out.println(t.getNodeValue());
}
NodeList ages = student.getElementsByTagName( "age ");
if (ages.getLength() == 1) {
Element e = (Element) ages.item(0);
Text t = (Text) e.getFirstChild();
studentBean.setAge(Integer.parseInt(t.getNodeValue()));
System.out.println(t.getNodeValue());
}
NodeList phones = student.getElementsByTagName( "phonenumber ");
if (phones.getLength() == 1) {
Element e = (Element) phones.item(0);
Text t = (Text) e.getFirstChild();
studentBean.setPhone(t.getNodeValue());
System.out.println(t.getNodeValue());
}
student_Vector.add(studentBean);
}
}
private void writeXMLFile(String outFile) throws Exception {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = null;
try {
db = dbf.newDocumentBuilder();
} catch (ParserConfigurationException pce) {
System.err.print(pce);
System.exit(1);
}
Document doc = null;
doc = db.newDocument();
Element root = doc.createElement( "students ");
doc.appendChild(root);
for (int i = 0; i < student_Vector.size(); i++) {
StudentBean studentBean = (StudentBean) student_Vector.get(i);
Element student = doc.createElement( "student ");
student.setAttribute( "sex ", studentBean.getSex());
root.appendChild(student);
Element name = doc.createElement( "name ");
student.appendChild(name);
Text tName = doc.createTextNode(studentBean.getName());
name.appendChild(tName);
Element age = doc.createElement( "age ");
student.appendChild(age);
Text tAge = doc
.createTextNode(String.valueOf(studentBean.getAge()));
age.appendChild(tAge);
Element phone = doc.createElement( "phonenumber ");
student.appendChild(phone);
Text tPhone = doc.createTextNode(studentBean.getPhone());
phone.appendChild(tPhone);
}
// 这个document就是xml文档对像模型吗???
// 如果我在Servlet里调用函数返回这个document是不是意味着调用了xml呀?
// String name = outFile;
DOMSource doms = new DOMSource(doc);
// File file = new File(outFile.toString());
// StreamResult result = new StreamResult(file);
// 上述方法不可行
StreamResult result = new StreamResult(new FileOutputStream(outFile
.toString()));
// TransformerFactory tf = TransformerFactory.newInstance();
// Transformer transformer = tf.newTransformer();
Transformer transformer = TransformerFactory.newInstance()
.newTransformer();
Properties properties = transformer.getOutputProperties();
properties.setProperty(OutputKeys.ENCODING, "GB2312 ");
properties.setProperty(OutputKeys.METHOD, "xml ");
properties.setProperty(OutputKeys.INDENT, "yes ");
transformer.setOutputProperties(properties);
transformer.transform(doms, result);
}
public static void main(String[] args) throws Exception {
System.out.println(System.getProperty( "user.dir "));
XMLTest xmlTest = new XMLTest();
xmlTest.student_Vector = new Vector();
System.out.println( "开始读student.xml文件 ");
xmlTest.readXMLFile( "XMLTest\\student.xml ");
StudentBean s1 = new StudentBean();
StudentBean s2 = new StudentBean();
s1.setAge(11);
s1.setName( "jinsanqi ");
s1.setPhone( "7451245 ");
s1.setSex( "F ");
xmlTest.student_Vector.addElement(s1);
s2.setAge(12);
s2.setName( "xiaobao ");
s2.setPhone( "88846 ");
s2.setSex( "M ");
xmlTest.student_Vector.addElement(s2);
System.out.println( "开始写Output.xml文件 ");
xmlTest.writeXMLFile( "XMLTest\\student_back.xml ");
System.out.println( "写入完成 ");
}
}
这里增加的时候可能需要构建一个JAVABEAN.
[解决办法]
dom4j
[解决办法]
jdom对XML的操作也不错。