您的位置:首页 > 编程语言 > Java开发

java DOM 对xml文件的操作【分别对节点、节点属性、节点内容增删改查】

2014-03-14 11:48 609 查看

最近研究xml文件 但是书上仅仅是解析 自己有点不满意 于是在“度娘谷哥”的帮助下搜集了一些有关于DOM操作xml文件的资料 并整理下来 也有0分的源码供大家下载

DOM是W3C组织推广的一中操作xml文件的方法,也是java原生态操作xml文件的方法之一,DOM的优点就是操作xml文件简单,可以重复随便的增删改查,但是不足的是,在操作前需要把整个xml文件以树状图加载到内存中,这样的话会影响程序的运行效率,所以,小的xml文件用DOM才是不错的选择

被操作的xml文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<clazz>
<student sn="01">
<name>张三</name>
<age>18</age>
</student>
<student sn="02">
<name>李四</name>
<age>20</age>
</student>
<student sn="03">
<name>王五</name>
<age>20</age>
</student>
</clazz>


xml文件与项目的路径关系如下:



问题:

【节点的增、删、改、查】

1、在根节点下增加一个<student>节点,添加属性sn值为04,<student>节点下有<name>、<age>节点节点内容分别为name=赵六,age=21(节点的增加)

2、在根节点下找到属性sn为02的<student>节点,并输出该节点下的姓名,年龄(节点的查询)

3、在根节点下找到属性sn为03的<student>节点,并删除该节点(节点的删除)

4、在根节点下找到属性sn为01的<student>节点,并把<student>节点修改为<teacher>(节点的修改)

【节点属性的增、删、改、查】

1、在sn=01的节点上增加属性type=班长

2、删除sn=02的sn属性

3、修改sn=03的sn属性为05

4、查询......(上面的都用到了)

【节点内容的增、删、改、查】

(其中的增与删没必要,因为增加就是改,删除也是改,删除也可以直接删除节点,所以只有改和查有意义)

1、查询sn=01的同学姓名

2、修改sn=02的同学姓名为王二

1、获取Document对象:

Document就是xml文件的“树状图”,获取Document对象需要通过工厂类去获取,下面的方法会返回一个Document对像,

public Document createDocument(){

Document document = null;

try {
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
FileInputStream  xmlInputStream = new FileInputStream("xmlFile/clazzXml.xml");
DocumentBuilder builder = builderFactory.newDocumentBuilder();

document = builder.parse(xmlInputStream);

} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

return document;

}


2、获取根节点:

获取xml的根节点可以通过Document中的getDocumentElement()方法:

Element root = document.getDocumentElement();


3、遍历xml文件:

public void domXML(Document document){

Element root = document.getDocumentElement();
System.out.println("xml文件的根节点为:"+root.getNodeName());
System.out.println();
NodeList stuNodeList = root.getChildNodes();

for(int i = 0;i < stuNodeList.getLength();i ++){

Node stuInforNode = stuNodeList.item(i);
if(stuInforNode.getNodeType() == Node.ELEMENT_NODE){

NodeList stuNode = stuInforNode.getChildNodes();
for(int j = 0;j < stuNode.getLength();j ++){

Node stuNode2 = stuNode.item(j);
if(stuNode2.getNodeName().equals("name")){
System.out.println("姓名:"+stuNode2.getTextContent());
}
else if(stuNode2.getNodeName().equals("age")){
System.out.println("年龄:"+stuNode2.getTextContent());
}

}

}

}

}


4、为指定节点下添加子节点:

//	1、在根节点下增加一个<student>节点,添加属性sn值为04,
//	<student>节点下有<name>、<age>节点节点内容分别为name=赵六,age=21(节点的增加)
public void addElement(Document document){

Element root = document.getDocumentElement();

//解决问题步骤1、创建节点 创建属性 创建内容 2、写入内容 写入属性 写入节点
//1、创建
//创建students节点以及students下的name节点与age节点
Element stuEle = document.createElement("student");
Element nameEle = document.createElement("name");
Element ageEle = document.createElement("age");
//创建name与age内容
Text nameText = document.createTextNode("赵六");
Text ageText = document.createTextNode("21");
//创建student节点属性sn=04
Attr stuAttr = document.createAttribute("sn");
stuAttr.setValue("04");

//2、写入
//写入属性
stuEle.setAttributeNode(stuAttr);
//把name、age写入student下
stuEle.appendChild(nameEle);
stuEle.appendChild(ageEle);
//写入内容
nameEle.appendChild(nameText);
ageEle.appendChild(ageText);
//把student写入根节点下
root.appendChild(stuEle);

}


该方法可以增加xml文件的节点 但是 程序执行后 打开xml文件 xml并没有改变 这好似因为我们并没有把修改过的xml重新写入到文件中 重新写入xml要使用Transformer对象

5、Transformer对象的获取 与保存修改过的xml文件

//保存xml文件
public void saveXml(Document document){

TransformerFactory transformerFactory = TransformerFactory.newInstance();
try {
Transformer transformer = transformerFactory.newTransformer();
DOMSource domSource = new DOMSource(document);
StreamResult streamResult = new StreamResult(new FileOutputStream("xmlFile/clazzXml.xml"));

transformer.transform(domSource, streamResult);

} catch (TransformerConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (TransformerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}


这样,加入修改过的Document对象 就会把修改过的xml文件保存

关于文章开头问题中剩下的操作请点击下面的连接下载源码

http://download.csdn.net/detail/yezis/7039201
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: