超详细的XML介绍【附带dom4j操作XML】
XML简介
XML(EXtensible Markup Language),可扩展标记语言**
特点
-
XML与操作系统、编程语言的开发平台无关
-
实现不同系统之间的数据交换
作用
-
数据交互
-
配置应用程序和网站
-
Ajax基石
XML文档结构:
1.声明 一般是XML文档的第一行
2.文档描述信息
声明的组成:
-
version:文档符合xml1.0规范
-
encoding:文档字符编码,默认为UTF-8
文档结构解释:
-
根元素:只有一个
-
根元素的开始标签:放在最前面
-
根元素的结束标签:放在最后面
-
标签内容在开始标签和结束标签之间
XML标签
XML文档内容由一系列标签元素组成
<元素名 属性名=“属性值”>元素内容</元素名>
-
属性值用双引号包裹
-
一个元素可以有多个属性
-
属性值中不能直接包含<、“、&
-
不建议使用的字符:‘、>
XML编写注意事项
-
所有XML元素都必须有结束标签
-
XML标签对大小写敏感
-
XML必须正确的嵌套
-
同级标签以缩进对齐
-
元素名称可以包含字母、数字或其他的字符
-
元素名称不能以数字或者标点符号开始
-
元素名称中不能含空格
DOM解析XML
DOM介绍
-
文档对象模型(Document Object Model)
-
DOM把XML文档映射成一个倒挂的树
常用接口介绍
DOM解析包:org.w3c.dom
常用接口 | 常用方法 | 说明 |
---|---|---|
Document:表示整个 XML 文档 | NodeList getElementsByTagName(String Tag) | 按文档顺序返回文档中指定标记名称的所有元素集合 |
Element createElement(String tagName) | 创建指定标记名称的元素 | |
Node:该文档树中的单个节点 | NodeList getChildNodes() | 获取该元素的所有子节点,返回节点集合 |
Element:XML 文档中的一个元素 | String getTagName() | 获取元素名称 |
DOM解析XML文件步骤
-
创建解析器工厂对象
-
解析器工厂对象创建解析器对象
-
解析器对象指定XML文件创建Document对象
-
以Document对象为起点操作DOM树
由外到内,由上到下解析
解析的操作和方法
1. 读取xml文件 SAXReader()
//将xml文件加载到内存中 XML解析器
SAXReader saxReader = new SAXReader();
//document 加载执行xml文档获取Document对象
Document document = saxReader.read(XML路径);
2.获取XML根节点getRootElement()
Element rootElement = document.getRootElement();
3. 获取当前节点下所有子节点 elements()
//获取根节点下所有子节点
List<Element> Elist = rootElement.elements();
4. 根据指定子元素名,获取元素下所有子节点
//获取节点名称为books下所有子节点
List<Element> Elist = rootElement.elements(“books”);
5. 根据指定子元素名,获取子元素对象,如果重复,则获取第一个
//获取节点名称为books下单个子节点
Element element= rootElement.element(“books”);
6. 设置元素文本内容 setText()
newelement.setText("内容");
7. 获取当前节点文本内容 getText()
elenent.getText()
8. 根据指定子元素名,获取元素中的文本
e.elementText(“book”)
9. 获取当前节点属性 attributeValue(“属性名”)
e.attributeValue("name")
11.创建节点Element对象.addElement("节点名")
Element newelement = rootElement.addElement("span");
12.节点添加,修改属性Element对象.addAttribute("节点属性名",“属性值”)
newelement.addAttribute("type","属性值");
13.新XML添加Documen对象
Document read = DocumentHelper.createDocument();
14.设置XML编码
OutputFormat
OutputFormat outputFormat=OutputFormat.createPrettyPrint();
outputFormat.setEncoding("UTF-8");
15.写入XML文件
//写入XML文件的位置 以及指定的格式
XMLWriter xmlWriter=new XMLWriter(new FileWriter("cs.xml"),outputFormat);
//开始写入XML文件 写入Document对象
xmlWriter.write(document);
xmlWriter.close();
引入dom4j jar包
解析XML
public static void showXml(){
try {
SAXReader saxReader = new SAXReader();
Document read = saxReader.read("index01/src/students.xml");
//读取根元素
Element rootElement = read.getRootElement();
System.out.println("根元素名称:"+rootElement.getName());
List<Element> elements = rootElement.elements();
for (Element element : elements) {
System.out.println( "根元素下面的元素的名称:"+element.getName()+",id属性的值为:"+element.attributeValue("id"));
Element element1 = element.element("name");
System.out.println("下面名为name元素的文本:"+element1.getText());
Element element2 = element.element("age");
System.out.println("下面名为age元素的文本:"+element2.getText());
Element element3 = element.element("score");
System.out.println("下面名为score元素属性为value的值:"+element3.attributeValue("value"));
}
} catch (Exception e) {
e.printStackTrace();
}
}
修改Xml
public static void updateXml(){
SAXReader saxReader = new SAXReader();
try {
Document read = saxReader.read("index01/src/students.xml");
Element rootElement = read.getRootElement();
List<Element> elements = rootElement.elements();
for (Element element : elements) {
if ("1002".equals(element.attributeValue("id"))){
Element element1 = element.element("name");
//修改第二个name元素名 李四==>王五
element1.setText("王五");
}
}
//新增元素
Element element = rootElement.addElement("student");
element.addAttribute("id","1003");
element.addElement("name").addText("马六");
element.addElement("age").addText("26");
element.addElement("score").addAttribute("value","99");
XMLWriter xmlWriter = new XMLWriter(new FileWriter("index01/src/students.xml"));
xmlWriter.write(read);
System.out.println("修改成功!!!");
xmlWriter.close();
} catch (Exception e) {
e.printStackTrace();
}
}
新增XML文件
public static void insertXml() {
//类方法,创建一个document对象
Document document = DocumentHelper.createDocument();
try {
Element root = document.addElement("books");
Element book1 = root.addElement("book").addAttribute("id", "book101");
book1.addElement("author").setText("张三");
book1.addElement("type").setText("文学");
book1.addElement("from").setText("北京出版社");
Element book2 = root.addElement("book").addAttribute("id", "book102");
book2.addElement("author").setText("李四");
book2.addElement("type").setText("历史");
book2.addElement("from").setText("上海出版社");
XMLWriter xmlWriter = new XMLWriter(new FileWriter("index01/src/books.xml"));
xmlWriter.write(document);
xmlWriter.close();
} catch (Exception e) {
e.printStackTrace();
}
}
删除XML元素
public static void deleteXml() {
SAXReader saxReader = new SAXReader();
try {
Document read = saxReader.read("index01/src/books.xml");
Element rootElement = read.getRootElement();
List<Element> elements = rootElement.elements();
for (Element element : elements) {
if (element.attributeValue("id").equals("book101")) {
Element element1 = element.element("author");
element.remove(element1);
System.out.println("删除成功");
}
}
XMLWriter xmlWriter = new XMLWriter(new FileWriter("index01/src/books.xml"));
xmlWriter.write(read);
xmlWriter.close();
} catch (Exception e) {
e.printStackTrace();
}
}