1. xml
概念:Extensible Markup Language
可擴展標記語言
可擴展:標簽都是自定義的。
功能
存儲數據
1. 配置文件
2. 在網絡中傳輸
xml與html的區別
- xml標簽都是自定義的,html標簽是預定義。
- xml的語法嚴格,html語法松散
- xml是存儲數據的,html是展示數據
基本語法:
- xml文檔的后綴名 .xml
- xml第一行必須定義為文檔聲明
- xml文檔中有且僅有一個根標簽
- 屬性值必須使用引號(單雙都可)引起來
- 標簽必須正確關閉
- xml標簽名稱區分大小寫
簡單實例
<?xml version='1.0' ?>
<users>
<user id='1'>
<name>zhangsan</name>
<age>23</age>
<gender>male</gender>
<br/>
</user>
<user id='2'>
<name>lisi</name>
<age>24</age>
<gender>female</gender>
</user>
</users>
組成部分:
- 文檔聲明
- 格式:
- 屬性列表:
* 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' ?>
<users error="none" code="success">
<user id='1'>
<name>zhangsan</name>
<age>23</age>
<gender>male</gender>
<br/>
</user>
<user id='2'>
<name>lisi</name>
<age>24</age>
<gender>female</gender>
</user>
</users>
解析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<Element> users = root.elements("user");
//輸入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<Node> list = doc.selectNodes("//user");
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> it = root.elementIterator(); it.hasNext(); ) {
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> it = root.elementIterator("user"); it.hasNext(); ) {
Element user = it.next();
System.out.println(user.elementTextTrim("age"));
}
System.out.println("----------------");
// iterate through attributes of root
for (Iterator<Attribute> it = root.attributeIterator(); it.hasNext(); ) {
Attribute attribute = it.next();
// do something
System.out.println(attribute.getValue());
}
}
}