- xml
概念:Extensible Markup Language 可扩展标记语言
可扩展:标签都是自定义的。
功能
存储数据
1. 配置文件
2. 在网络中传输
xml与html的区别
xml标签都是自定义的,html标签是预定义。
xml的语法严格,html语法松散
xml是存储数据的,html是展示数据
基本语法:
xml文档的后缀名 .xml
xml第一行必须定义为文档声明
xml文档中有且仅有一个根标签
属性值必须使用引号(单双都可)引起来
标签必须正确关闭
xml标签名称区分大小写
简单实例
<?xml version=’1.0’ ?>
组成部分:
文档声明
格式:
属性列表:
version:版本号,必须的属性
encoding:编码方式。告知解析引擎当前文档使用的字符集,默认值:ISO-8859-1
standalone:是否独立
取值:
yes:不依赖其他文件
no:依赖其他文件
标签:标签名称自定义的
规则:
名称可以包含字母、数字以及其他的字符
名称不能以数字或者标点符号开始
名称不能以字母 xml(或者 XML、Xml 等等)开始
名称不能包含空格
属性:
id属性值唯一
文本:
CDATA区:在该区域中的数据会被原样展示
格式:
2. xml解析与写入
xml常见的解析器:
1. JAXP:sun公司提供的解析器,支持dom和sax两种思想
2. DOM4J:一款非常优秀的解析器
3. Jsoup:jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。
4. PULL:Android操作系统内置的解析器,sax方式的。
使用dom4j解析xml
xml文件如下
<?xml version=’1.0’ ?>
解析xml
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.io.File;
import java.util.List;
public class XmlDemo {
public static void main(String[] args) throws DocumentException {
//获取文档对象
SAXReader reader = new SAXReader();
Document doc = reader.read(new File(“user.xml”));
//获取根元素
Element root = doc.getRootElement();
System.out.println(“获取到的根元素” + root);
//获取所有的子元素Love
List
//输入name元素的内容
for (Element element : users) {
System.out.println(“获取id属性:” + element.attribute(“id”).getValue());
System.out.println(“获取name:” + element.elementTextTrim(“name”));
System.out.println(“获取age:” + element.elementTextTrim(“age”));
System.out.println(“获取gender:” + element.elementTextTrim(“gender”));
System.out.println(“———————-“);
}
}
}
使用XPath快速查找
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
import java.io.File;
import java.util.List;
public class XmlDemo {
public static void main(String[] args) throws DocumentException {
//获取文档对象
SAXReader reader = new SAXReader();
Document doc = reader.read(new File(“user.xml”));
List
for (Node node : list) {
System.out.println(node.valueOf(“name”));
}
System.out.println(“——————“);
Node node = doc.selectSingleNode(“//user”);
String id = node.valueOf(“@id”);
System.out.println(id);
System.out.println(“——————“);
Node node2 = doc.selectSingleNode(“//user[@id=’2’]”);
String name = node.valueOf(“name”);
System.out.println(name);
}
}
创建一个新的XML文档并写入本地
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
import java.io.FileOutputStream;
import java.io.IOException;
public class XmlDemo {
public static void main(String[] args) throws IOException {
Document document = DocumentHelper.createDocument();
Element root = document.addElement(“root”);
Element author1 = root.addElement(“author”)
.addAttribute(“name”, “James”)
.addAttribute(“location”, “UK”)
.addText(“James Strachan”);
Element author2 = root.addElement(“author”)
.addAttribute(“name”, “Bob”)
.addAttribute(“location”, “US”)
.addText(“Bob McWhirter”);
//设置写入xml为格式化的xml
OutputFormat format = OutputFormat.createPrettyPrint();
//设置写入的xml为压缩的xml
//OutputFormat format = OutputFormat.createCompactFormat();
XMLWriter writer = new XMLWriter(new FileOutputStream(“new.xml”), format);
writer.write(document);
writer.close();
}
}
遍历迭代xml
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
public class XmlDemo {
public static void main(String[] args) throws DocumentException {
//获取文档对象
SAXReader reader = new SAXReader();
Document document = reader.read(new File(“user.xml”));
Element root = document.getRootElement();
// iterate through child elements of root
for (Iterator
Element element = it.next();
// do something
System.out.println(element.elementTextTrim(“name”));
}
System.out.println(“————————“);
// iterate through child elements of root with element name “foo”
for (Iterator
Element user = it.next();
System.out.println(user.elementTextTrim(“age”));
}
System.out.println(“————————“);
// iterate through attributes of root
for (Iterator
Attribute attribute = it.next();
// do something
System.out.println(attribute.getValue());
}
}
}
