XML基础(Extensive Markup Language)
XML是什么:
XML能干什么:
XML文档节点类型
- 文档(document)
- 元素(element)
- 属性(attribute)
- 文本(PCDATA--parsed character data)
- 注释(comment)
- DOCTYPE :主要验证文档内容的正确性
- 实体(ENTITIES)
- CDATA(character data)
XML语法
- 声明:<?xmlversion="1.0" encoding="UTF-8"?>
- 根节点:必须有一个根节点
- 标签:标签必须有结束且区分大小写,标签必须顺序嵌套
- 属性:必须引号引起值
- 空格会被保留,HTML空格最多保留一个
- 命名规则:命名必须见名知意 a)名字可包含字母、数字以及其他的字符 b)名字不能以数字或者标点符号开始 c)名字不能以字符“xml”(或者XML、Xml)开始
- 名字不能包含空格
- 不应在 XML 元素名称中使用 ":" ,这是由于它用于命名空间(namespaces)的保留字。
- 标签优先于属性。
- XML 命名空间可提供避免元素命名冲突的方法。
- CDATA:字符数据,<![CDATA[字符数据]]> ,字符数据不进行转义
- 实体:&实体;
以下对比较常用的几种方法进行实例演示:
- Document:代表文档对象 Element:节点对象
- Attribute:属性
- Text:文本
- SAXReader:读取器
- getRootElement():通过document对象获取该文档的根节点
- Element addElement(“名称”):添加特定节点 返回值是要被添加的节点
- addAttribute(“属性名”,“属性值”):为指定节点添加属性 elementIterator:子元素迭代器,返回Iterator对象
- attributeValue(“属性名”)根据属性名获取属性值 addText:添加文本 remove():移除指定元素 属性…
- getText:获取文本
package demo;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
/**
* Document:代表文档对象 Element:节点对象 Attribute:属性 Text:文本 SAXReader:读取器
* ------------------------------------- getRootElement():通过document对象获取该文档的根节点
* Element addElement("名称"):添加特定节点 返回值是要被添加的节点
* addAttribute("属性名","属性值"):为指定节点添加属性 elementIterator:子元素迭代器,返回Iterator对象
* attributeValue("属性名")根据属性名获取属性值 addText:添加文本 remove():移除指定元素 属性....
* getText:获取文本
*
* **dom4j:在操作其中的一个节点的同时,必须通过上一级节点进行操作.一定要获取根节点
*
* @author cmy
*
*/
public class XMLDemo {
Document document; // 文档
public static void main(String[] args) throws Exception {
XMLDemo demo = new XMLDemo();
demo.getDocument();
// demo.addElement();
// demo.delectElement();
//demo.modityElement();
demo.getPhoneById("001");
demo.saveXML();
}
// 1:获取文档对象
public void getDocument() throws Exception {
// 创建SAX读取器
SAXReader reader = new SAXReader();
document = reader
.read(this.getClass().getResourceAsStream("phone.xml"));
}
// 2:增加元素操作
public void addElement() {
// dom4j的特点:通过根节点操作其他的节点 首先获取根节点
Element root = document.getRootElement();
// 增加手机节点
Element phone = root.addElement("phone");
// 为手机节点增加属性
phone.addAttribute("id", "004");
// 依次增加子节点
Element brand = phone.addElement("brand");
Element type = phone.addElement("type");
Element price = phone.addElement("price");
Element description = phone.addElement("description");
// 为子节点添加文本值
brand.addText("vivo");
type.addText("x23");
price.addText("3000");
description.addText("还好的手机");
}
// 删除元素操作
public void delectElement() {
Element root = document.getRootElement();
Iterator<Element> interator = root.elementIterator();
while (interator.hasNext()) {
Element ele = interator.next();
if (ele.attributeValue("id").equals("004")) {
root.remove(ele);
break;
}
}
}
// 修改元素操作
public void modityElement() {
Element root = document.getRootElement();
Iterator<Element> iter = root.elementIterator();
while (iter.hasNext()) {
Element ele = iter.next();
if (ele.attributeValue("id").equals("003")) {
Iterator<Element> inter = ele.elementIterator();
while (inter.hasNext()) {
Element ele2 = inter.next();
if (ele2.getName().equals("price")) {
ele2.setText("5000");
}
}
}
}
}
// 查询元素操作 根据Id查询手机信息
public void getPhoneById(String id){
Element root = document.getRootElement();
Iterator<Element> iterator=root.elementIterator();
while(iterator.hasNext()){
Element ele = iterator.next();
if(ele.attributeValue("id").equals(id)){ //获取phone节点
Iterator<Element> iter=ele.elementIterator(); //phone节点下的子节点
while(iter.hasNext()){
System.out.println(iter.next().getText());
}
break;
}
}
}
// 保存操作
public void saveXML() throws Exception {
FileWriter fw = new FileWriter(
"D:\Workspaces\XMLTest\src\demo\phone.xml");
OutputFormat format = OutputFormat.createPrettyPrint();
// 设置字符集
format.setEncoding("GBK");
XMLWriter writer = new XMLWriter(fw, format);
writer.write(document);
writer.flush();
writer.close();
fw.close();
}
}