1. 程式人生 > >Xml學習(2)

Xml學習(2)

1、CDATA區:

非法字元

嚴格的講,在XML中僅有字元“<”和“&”是非法的。省略號、引號和大於號是合法的,但是把它們替換為實體引用是個好習慣。

<      &lt;

&      &amp;

如果某段字串裡面有過多的字元,並且裡面包含了類似標籤或者關鍵字的這種文字,不想讓xml的解析器去解析,那麼可以使用CDATA

             <des><![CDATA[<a href="http://www.baidu.com">我愛Java</a>]]></des>

CDATA部分中的所有內容都會被解析器忽略。由"<![CDATA["開始,由“]]>”結束。CDATA一般比較少看到,通常在伺服器給客戶端返回資料的時候。

2、XML解析

>其實就是獲取裡面的字元資料或者屬性資料。

3、XML解析方式面試常問

>有很多種,但是常用的有兩種

>DOM:(document Object model)把所有文件全部讀取到記憶體當中形成樹結構,整個文件稱之為document物件,屬性對應Attribute物件,所有元素節點對應Element物件,文字稱之為Text物件,以上所有物件稱之為Node節點。如果xml特別大,則造成記憶體溢位,可以對文件進行增刪。

>SAX:Simple API for xml ,基於事件驅動,讀取一行,解析一行。不會造成記憶體溢位,不可以進行增刪,只能查詢。

針對這兩種解析方式的API

      jaxp(sun公司,比較繁瑣)、jdom、dom4j(使用比較廣泛)

4、Dom4j基本用法

1)建立SaxReader物件、

2)指定解析的xml

3)獲取根元素

4)根據根元素獲取子元素或者下面的子孫元素

try {
            //1. 建立sax讀取物件
            SAXReader reader = new SAXReader(); //jdbc -- classloader
            //2. 指定解析的xml源
            Document  document  = reader.read(new File("src/xml/stus.xml"));            
            //3. 得到元素、
            //得到根元素
            Element rootElement= document.getRootElement();
            
            //獲取根元素下面的子元素 age
            //rootElement.element("age") 
            //System.out.println(rootElement.element("stu").element("age").getText());


            //獲取根元素下面的所有子元素 。 stu元素
            List<Element> elements = rootElement.elements();
            //遍歷所有的stu元素
            for (Element element : elements) {
                //獲取stu元素下面的name元素
                String name = element.element("name").getText();
                String age = element.element("age").getText();
                String address = element.element("address").getText();
                System.out.println("name="+name+"==age+"+age+"==address="+address);
            }            
        } catch (Exception e) {
            e.printStackTrace();
        }

5、Dom4j的Xpath使用

>dom4j裡面支援Xpath的寫法。xpath其實是xml的路勁語言,支援我們在解析xml的時候,能夠快速的定位到具體的某一個元素

1)新增jar包依賴        jaxen-1.1-beta-6.jar

2)在查詢指定節點的時候,根據XPath語法規則來查詢

3)後續的程式碼與以前的·解析程式碼一樣。           

 //要想使用Xpath, 還得新增支援的jar 獲取的是第一個 只返回一個。 
            Element nameElement = (Element) rootElement.selectSingleNode("//name");
            System.out.println(nameElement.getText());


            System.out.println("----------------");

            //獲取文件裡面的所有name元素 
            List<Element> list = rootElement.selectNodes("//name");
            for (Element element : list) {
                System.out.println(element.getText());
            }