一、可扩展标记语言xml:Extensible Markup Language
1、XML的作用:1)统一数据传输的格式。2)做小型数据库[文件型数据库]。3)做配置文件 .ini .propertity .xml .cfg
2、XML文件的基本格式:
标签:分为双标签和单标签,双标签的开头和结尾标签名必须一致,大小写一样,/ 开头的是结尾标签,单标签必须在 > 前加上 / 来结尾,单标签中不能放文本。
属性:在开始标签中定义一些名值对,值一定是字符串
3、XML文件的基本构成:
1)在第一行是XML声明 <?xml version="1.0" encoding="UTF-8" ?>
2)必须且只能有一对根标签
3)标签可以一层一层嵌
二、写一个简单的xml文档stus.xml然后用Dom进行解析。下载
DOM : Document Object Model 文档对象模型
DOM解析的基本思路:将整个XML文件一次性读入内存,将整个XML看做一棵文档树,XML中的每一个标签,属性,文本都看做是树上的一个结点,然后可以对结点进行增删改查的操作。
已经编辑好的stus.xml文档
<?xmlversion="1.0"encoding="UTF-8"?>
<stusClass="1401">
<stunum="01">
<name>张三</name>
<age>19</age>
<sex>男</sex>
</stu>
<stunum="02">
<name>李四</name>
<age>20</age>
<sex>女</sex>
</stu>
<stunum="03">
<name>王五</name>
<age>21</age>
<sex>男</sex>
</stu>
</stus>
三、开始解析
创建解析工厂
//得到解析工厂对象
DocumentBuilderFactoryfactory=DocumentBuilderFactory.newInstance();
//生产一个解析器对象
DocumentBuilderbuilder=factory.newDocumentBuilder();
//开始解析xml文件,得到的解析结果是一个Document对象,Document对象叫做文档树对象
Documentdocument=builder.parse("stus.xml");
1、增加节点
基本思路:首先创建一个新的元素节点,将元素节点追加到根节点后面,设置其节点属性。创建标签,设置标签文本内容,最后将新标签添加到新的元素节点中。
代码:
Java代码
- //创建一个新的元素节点
Elementstu=dom.createElement("stu");
//将元素节点追加到根节点后面
root.appendChild(stu);
//设置节点属性
stu.setAttribute("num","04");
//创建标签
Elementname=dom.createElement("name");
Elementage=dom.createElement("age");
Elementsex=dom.createElement("sex");
name.setTextContent("赵六");
age.setTextContent("19");
sex.setTextContent("女");
stu.appendChild(name);
stu.appendChild(age);
stu.appendChild(sex);
2、删除节点
基本思路:获得要删除的节点,然后得到节点的属性值,与要删除的节点的属性值进行比较,如果该属性值对应的节点存在则移除该节点。
//获得根节点
Elementroot=(Element)dom.getFirstChild();
//获得所有stu节点
NodeListlist=dom.getElementsByTagName("stu");
for(inti=0;i<list.getLength();i++){
Nodenode=list.item(i);
if(nodeinstanceofElement){
Elemente=(Element)node;
Stringnum=e.getAttribute("num");
if(num.equals("02")){
root.removeChild(e);
break;
}
}
}
3、修改节点
基本思路:获得要修改的节点,修改其属性值,然后获得该节点下的标签,修改标签中的文本内容。
//修改节点属性
intj=0;j<list.getLength();j++){
Nodeno=list.item(j);
if(noinstanceofElement){
Elementel=(Element)no;
Stringn=el.getAttribute("num");
if(n.contains("01")){
el.setAttribute("num","05");
NodeListli=el.getChildNodes();
intx=0;x<li.getLength();x++){
Noded=li.item(x);
if(dinstanceofElement){
Elementee=(Element)d;
StringnoN=ee.getNodeName();
if(noN.equals("name")){
ee.setTextContent("小白");
}elseif(noN.equals("age")){
ee.setTextContent("11");
}if(noN.equals("sex")){
ee.setTextContent("男");
}
}
}
}
4、查找节点
基本思路:获得所有的节点,用 需要查找的结点的属性值与所有节点进行比较,如果该节点存在,就打印该节点的属性值及其节点下标签的内容。
instanceofElement){
Elementel=(Element)no;
Stringn=el.getAttribute("num");
if(n.equals("03")){
System.out.println(no.getNodeName()+"\t"+n+no.getTextContent());
}
}
}
4、保存修改后的xml文档
基本思路:先将内存中的Document对象写到xml文件中,然后将整个Document对象作为要写入xml文件的数据源,最后将数据源写入目标文件。
//将内存中的Document对象写到xml文件中
TransformerFactorytf=TransformerFactory.newInstance();
Transformerformer=tf.newTransformer();
former.setParameter("version","1.0");
former.setParameter("encoding","GBK");
//将整个Document对象作为要写入xml文件的数据源
DOMSourcexmlSource=newDOMSource(dom);
//要写入的目标文件
StreamResultoutputTarget=new
StreamResult(newFile("F:\\stus2.xml"));
former.transform(xmlSource,outputTarget);