XML:eXtensible Markup Language 可擴展標記語言
原因:存儲XML的文件的編碼格式與XML文件第一行中聲明的<?xml version="1.0" encoding="編碼" ?>不相符,導致XML錯誤。
分析:存儲XML的文件的編碼格式是XML文件的實際編碼類型,而文件聲明的encoding是告訴打開它的應用程序,要用我指定的編碼方式進行解碼,故出錯。
解決方法:encoding改為文件的編碼,或者改變文件的編碼即可。
疑問:你可能想如果我不指定的encoding呢?
答案:如果未指定encoding,打開XML的應用程序將會兩種情況打開:
1 按照文件的編碼打開(最好不過了)
2 按照應用程序的默認編碼打開,比如有些浏覽器按照默認UTF-8打開。
啟示:XML文件必須加上encoding,這樣萬無一失。
目前,XML約束分為2類,dtd,和schema。
dtd:缺點不能准確限制數據類型。
dtd分類:
* 內部dtd:在xml內部定義dtd
* 外部dtd:在外部文件中定義dtd
* 本地dtd文件:<!DOCTYPE students SYSTEM "student.dtd">
* 網絡dtd文件:<!DOCTYPE students PUBLIC "名稱空間" "student.dtd">
dtd詳情請見菜鳥教程:http://www.runoob.com/dtd/dtd-tutorial.html
schema:
導入xsd約束文檔:
1、編寫根標簽
2、引入實例名稱空間 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3、引入名稱空間 xsi:schemaLocation="http://www.itcast.cn/xml student.xsd"
4、引入默認的名稱空間
schema詳情請見菜鳥教程:http://www.runoob.com/schema/schema-tutorial.html
看到這裡,不知道做Java EE的同學認出了,這是JavaEE項目中web.xml開頭那段總是TMD看不懂的代碼。那裡采用的就是schema約束。
xml解析思想:
* DOM解析:將文檔加載進內存,形成一顆dom樹(document對象),將文檔的各個組成部分封裝為一些對象。
* 優點:因為,在內存中會形成dom樹,可以對dom樹進行增刪改查。
* 缺點:dom樹非常占內存,解析速度慢。
* SAX解析:逐行讀取,基於事件驅動
* 優點:不占內存,速度快
* 缺點:只能讀取,不能回寫
xml常用的解析器:
* DOM4J:
1.導入jar包 dom4j.jar,最新為dom4j-1.6.1.jar
2.創建解析器
SAXReader reader = new SAXReader();
3.解析xml 獲得document對象
Document document = reader.read(url);
* XPATH:專門用於查詢
* 定義了一種規則。
* 使用的方法:
* selectSingleNode():
* selectNodes():
使用步驟:
1、注意:要導包dom4j-1.6.1.jar和jaxen-1.1-beta-6.jar兩個包。
2、創建解析器
SAXReader reader = new SAXReader();
3、解析xml 獲得document對象
Document document = reader.read(url);