XMl簡介:
- 1.可擴展標記語言(eXtensible Markup Language)。
特性:
1. xml具有平臺無關性, 是一門獨立的標記語言.
2. xml具有自我描述性 - 2. 標記 ( 元素 / 標簽 / 節點)
XML文檔,由一個個的標記組成.
語法:
開始標記(開放標記): <標記名稱>
結束標記(閉合標記): </標記名稱>
標記名稱: 自定義名稱,必須遵循以下命名規則:
1.名稱可以含字母、數字以及其他的字符
2.名稱不能以數字或者標點符號開始
3.名稱不能以字符 “xml”(或者 XML、Xml)開始
4.名稱不能包含空格,不能包含冒號(:)
5.名稱區分大小寫
標記內容: 開始標記與結束標記之間 ,是標記的內容.
例如 ,我們通過標記, 描述一個人名:
<name>張三</name> - 3. 一個XML文檔中, 必須有且且僅允許有一個根標記.
正例:
<names>
<name>張三</name>
<name>李四</name>
</names>
反例:
<name>李四</name>
<name>麻子</name> - 4. 標記可以嵌套, 但是不允許交叉.
正例:
<person>
<name>李四</name>
<age>18</age>
</person>
反例:
<person>
<name>李四<age></name>
18</age>
</person> - 5. 標記的層級稱呼 (子標記, 父標記 , 兄弟標記, 后代標記 ,祖先標記)
例如:
<persons>
<person>
<name>李四</name>
<length>180cm</length>
</person>
<person>
<name>李四</name>
<length>200cm</length>
</person>
</persons>
name是person的子標記.也是person的后代標記
name是persons的后代標記.
案例:
語法進階CDATA
name是length的兄弟標記.
person是name的父標記.
persons是name的祖先標記. - 6. 標記名稱 允許重復
7. 標記除了開始和結束 , 還有屬性.
標記中的屬性, 在標記開始時 描述, 由屬性名和屬性值 組成.
格式:
在開始標記中, 描述屬性.
可以包含0-n個屬性, 每一個屬性是一個鍵值對!
屬性名不允許重復 , 鍵與值之間使用等號連接, 多個屬性之間使用空格分割.
屬性值 必須被引號引住.
案例:
<persons>
<person id="10001" groupid="1">
<name>李四</name>
<age>18</age>
</person>
<person id="10002" groupid="1">
<name>李四</name>
<age>20</age>
</person>
</persons>
解析本地文件案例:
package com.demo;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.List;
/**
* @Author: 八a哥
* @Description:
* @Date Created in 2022-04-15 17:24
* @Modified By:
*/
public class Demo04 {
public static void main(String[] args) throws IOException, DocumentException {
// 1.創建輸入流
FileInputStream fis = new FileInputStream("E:\\data\\Demo1.xml");
// 2.創建XMl讀取對象
SAXReader sr = new SAXReader();
// 3.讀取并得到文檔對象
Document doc = sr.read(fis);
// 4.通過文檔對象+xpath,查找所有的name節點
List<Node> name = doc.selectNodes("http://book[@id='1001']//name");
for (int i = 0;i<name.size(); i++){
System.out.println(name.get(i).getName());
System.out.println(name.get(i).getText());
}
fis.close();
}
}
解析網絡文件案例:
package com.demo; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.Node; import org.dom4j.io.SAXReader; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.net.URLConnection; public class Demo05 { public static void main(String[] args) throws DocumentException, IOException { String phone = "13375276751"; // 1.獲取到xml資源的輸入流 URL url = new URL("http://apis.juhe.cn/mobile/get?phone="+phone+"&dtype=xml&key=9f3923e8f87f1ea50ed4ec8c39cc9253"); URLConnection coon = url.openConnection(); InputStream is = coon.getInputStream(); // 2.創建一個xml讀取對象 SAXReader sr = new SAXReader(); // 3.通過讀取對象 讀取xml數據 并返回文檔對象 Document doc = sr.read(is); // 4.獲取根節點 Element root = doc.getRootElement(); Node node = doc.selectSingleNode("http://company"); System.out.println("該號碼的運營商為:"+node.getText()); is.close(); } }
JSON: JavaScript Object Notation JS對象簡譜 , 是一種輕量級的數據交換格式.
JSON格式:
一本書
書名
簡介
java
class Book{
private String name;
private String info;
數組格式
案例
get/set...
}
Book b = new Book();
b.setName(“金蘋果”);
b.setInfo(“種蘋果”);
...
js:
var b = new Object();
b.name = "金蘋果";
b.info = "種蘋果";
XML:
<book>
<name>金蘋果</name>
<info>種蘋果</info>
</book>
JSON:
{
"name":"金蘋果",
"info":"種蘋果"
}
一個對象, 由一個大括號表示.
括號中 描述對象的屬性 . 通過鍵值對來描述對象的屬性
(可以理解為, 大括號中, 包含的是一個個的鍵值對.)
格式:
鍵與值之間使用冒號連接, 多個鍵值對之間使用逗號分隔.
鍵值對的鍵 應使用引號引住 (通常Java解析時, 鍵不使用引號會報錯. 而JS能正確解
析.)
鍵值對的值, 可以是JS中的任意類型的數據。
將JSON字符串轉換為對象:
1 package com.java.demo2; 2 3 import com.google.gson.Gson; 4 5 public class Demo2 { 6 7 public static void main(String[] args) { 8 //1. 創建Gson對象 9 Gson g = new Gson(); 10 //2. 轉換 : {"id":"100","name":"金蘋果","info":"種植蘋果真辛苦"} 11 Book b = g.fromJson("{\"id\":\"100\",\"name\":\"金蘋果\",\"info\":\"種植蘋果真辛苦\"}", Book.class); 12 System.out.println(b.getId()); 13 } 14 }
將JSON字符串轉換為對象
1 package com.java.demo2; 2 3 import com.alibaba.fastjson.JSON; 4 5 public class Demo5 { 6 public static void main(String[] args) { 7 8 //1. 轉換 : {"id":"1002","info":"床前明月光,地上鞋一堆。床上我杰哥,喊十塊錢一雙。","name":"唐詩三百首"} 9 Book book = JSON.parseObject("{\"id\":\"1002\",\"info\":\"床前明月光,地上鞋一堆。床上我杰哥,喊十塊錢一雙。\",\"name\":\"唐詩三百首\"}", Book.class); 10 System.out.println(book.getId()); 11 12 } 13 }
1 package com.java.demo2; 2 3 import com.alibaba.fastjson.JSON; 4 5 import java.util.List; 6 7 public class Demo6 { 8 public static void main(String[] args) { 9 10 //1. 轉換 : ["一二三","二三四","三四五"] 11 List<String> strings = JSON.parseArray("[\"一二三\",\"二三四\",\"三四五\"]", String.class); 12 System.out.println(strings.get(1)); 13 14 } 15 }
最后我個人認為還是json更方便且流行性較高,JSON讀起來更像一個數據塊,讀起來就比較費解了。不過,我們讀起來費解的語言,恰恰是適合機器閱讀。
浙公網安備 33010602011771號