1、 什么是XML
EXtensible Markup Language 可扩展标记语言
特点
XML与操作系统、编程语言的开发平台无关
实现不同系统之间的数据交换
作用
数据交互
配置应用程序和网站
Ajax的基石
所有XML元素都必须有结束标签 XML标签对大小写敏感 XML元素都必须正确嵌套 同级标签以缩进形式对齐 元素名称可以包含字母、数字或其他的字符 元素名称不能以数字或者标点符号开始 元素名称中不能包含空格(不要包含连字符、减号) 必须有且仅有一个根元素
2、 DTD文件
此段内同可以参考W3CSCHOOL
<?xml version="1.0" encoding="UTF-8"?>
<!-- +可以有一个或多个,至少一个,?有一个或者没有最多一个,*随意 -->
<!DOCTYPE books[
<!ElEMRNT books (book*)>
<!ElEMRNT book (author,title,description)>
<!ElEMRNT author (#PADATA)>
<!ElEMRNT title (#PADATA)>
<!ElEMRNT description (#PADATA)>
]>
<books>
<!-- 图书信息 -->
<book id="bk01">
<author>王珊</author>
<title>NET高级编程</title>
<description>包含C#框架和网络编程等</description>
</book>
<book id="kb102">
<author>王珊2</author>
<title>NET高级编程2</title>
<description>包含C#框架和网络编程等2</description>
</book>
</books>
3、 使用DOM操作XML
3.1、 读取DOM文件内容
//XML原文件
<?xml version="1.0" encoding="UTF-8"?>
<PhoneInfo>
<Brand name="华为" id="001"><Type name="U8650"/><Type name="HW123"/><Type name="HW321"/></Brand>
<Brand name="苹果" id="002"><Type name="iPhone4"/></Brand>
</PhoneInfo>
public static void main(String[] args)throws Exception{
//DOM解析XML文件步骤
//1.创建解析器工厂对象
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
//2.解析器工厂对象创建解析器对象
DocumentBuilder db=factory.newDocumentBulider();
//3.解析器对象指定XML文件创建Document对象
Documnet document=db.parse(new File("收藏信息.xml");
//4.以Document对象为起点操作DOM树;
NodeList brand=document.getElementsByTagName("Brand");
System.out.println("收藏的品牌数为"+brand.getLength());
for(int i=0;i<brand.getLength();i++){
//获取节点的所有属性值
NamedNodeMap attributes=brand.item(i).getAttributes();
//通过属性的name获取属性的Node对象
Node name=attributes.getNameItem("name");
//通过属性Node都西昂的getNodeValue方法,获取他的值
System.out.println(name.getNodeValue());
NodeList childNodes=brand.item(i).getChildNodes();
for(int j=0;j<childNode.getLength();j++){
if(childNodes.item(j),getNodeType()==1){
NamedNodeMap attributes1=childNodes.item(j).getAttributes();
Node name1=attributes1.getNamedItem("name");
System.out.println(name1.getNodeValue());
//System.out.println("-----------");
//或者,可以直接通过这样获取
//System.out.println(((Elemnt)childNodes.item(j)).getAttributes("name"));
//if({"123123".equals(name1.getNodeValue())){
//如果想要获取元素中间的文本,则使用图下方法
//System.out.println(((Element)childNodes.item(j)).getTextContent());
//}
}
}
}
}
3.2、 写入新的xml文件
package Day26;
/*
使用DOM复制一个文件
*/
import org.w3c.dom.Document;
import org.xml.sax.SAXException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.*;
//dom读取(不用工具完整版)
public class Test {
public static void main(String[] args) {
//获取TransFormerFactory工厂对象
TransformerFactory factory=TransformerFactory.newInstance();
//indent-number表示缩进位置
factory.setAttribute("indent-number",4);
try {
//通过工厂对象,获得我们的Transformer对象
Transformer transformer= factory.newTransformer();
//1、创建解析器工厂对象
DocumentBuilderFactory documentBuilderFactory=DocumentBuilderFactory.newInstance();
//2、解析器工厂对象创建解析器对象
DocumentBuilder db=documentBuilderFactory.newDocumentBuilder();
//3、解析器都西昂指定XML文件创建Document对象
Document document=db.parse(new File("src/Day25/收藏信息.xml"));
//设置我们将会输出的字符集
transformer.setOutputProperty(OutputKeys.ENCODING,"UTF-8");
//制定了当输出结果数时,transformer是否可以添加额外的空白:其值必须为yes或no
//yes会插入空白,no不会插入空白
transformer.setOutputProperty(OutputKeys.INDENT,"yes");
//创建StreamResult对象
//包含保存文件的信息
FileOutputStream fos = new FileOutputStream("收藏信息02");
OutputStreamWriter out=new OutputStreamWriter((fos));
StreamResult result=new StreamResult(out);
//需要写入的信息
DOMSource source=new DOMSource(document);
try {
transformer.transform(source,result);
} catch (TransformerException e) {
e.printStackTrace();
}
System.out.println("写入数据:");
} catch (TransformerConfigurationException e) {
e.printStackTrace();
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
}
}
}
3.3、 Util工具类
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.xml.sax.SAXException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurati