亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

輕裝上陣,安卓工程師之路---day05(Dom4J & Tom

系統 2314 0

?

01?Java-DOM4J(DOM4J 開源組織 )-DOM 解析 XML 文件

解析:是用 Java 等相關技術將 XML 文件中有用的信息提取

出來的過程叫解析。

解析分為二個大類別

1.?DOM Document?Object?Model )類別

一次性將硬盤中的 XML 文件加載的內存形成一個倒狀的樹結構,從根開始從上向下依次遍歷,獲取有用節點的內容

2.?SAX(Simple?Api?for?Xml) 類別

分多次將硬盤中的 XML 文件加載的內存中,以事件的方式去解析節點中有用的內容

?

目前 :

1.?空間不是問題,問題是時間, 所以 W3C 組織推薦使用 DOM 技術解析。

?

// 創建 XML 文件,無文件則創建;有文件則覆蓋

Document?xmlDocument?=?DocumentHelper.createDocument();

?

// 將符合條件的字符串轉成 XML 文件

Document?xmlDocument?=?DocumentHelper.parseText(str);

?

// 創建 dom4j 核心解析器

SAXReader?saxReader?=?new?SAXReader();

?

// 讀取硬盤中的 xml 文件

Document?xmlDocument?=?saxReader.read(new?File("E:/bookstore.xml"));

?

// 寫出到硬盤文件

XMLWriter?xmlWriter?=?new?XMLWriter(new?FileWriter("E:\\test.xml"));

xmlWriter.write(document);

xmlWriter.close();

?

Document 對象寫入 XML 文件?

1. 文檔中全為英文 , 不設置編碼 , 直接寫入的形式 .??

XMLWriter?writer?=?new?XMLWriter(new??FileWriter("output.xml"));??

writer.write(document);??writer.close();

?

2. 文檔中含有中文 , 設置編碼格式寫入的形式 .

OutputFormat?format?=?OutputFormat.createPrettyPrint();//? 指定 XML 編碼 ???????????????????

format.setEncoding("GBK");???????

XMLWriter?writer?=?new?XMLWriter(newFileWriter("output.xml"),format);

writer.write(document);writer.close();

?

字符串與 XML 的轉換?

1. 將字符串轉化為 XML

????? String?text?=?"<members>?<member>sitinspring</member></members>";

? Document?document?=?DocumentHelper.parseText(text);

2. 將文檔或節點的 XML 轉化為字符串 .

?

類加載器 : 我們的所有程序文件,都是由類加載器去讀取硬盤中的內容,以流的方式加載到 JVM 中的

類加載器分為不同的類別,如果是讀取我們自已創建的程序文件,始終只是一個類加載器去負責讀取

類加載器不會亂去加載,只會去類目錄下加載文件,即在開發工具的默認是 src 目錄下加載

?

?

?

?

02?XPATH 表達式 (//goods[@id='isbn100'])

XPATH 就是一個字符串,不過這個字符串有其特殊的含義, 利用其特殊含義能快速定位節點。

使用 XPath 必須導入 jaxen-1.1-beta-6.jar ?,? dom4j lib 文件夾下

jaxen-1.1-beta-6.jar

/tv/a/b/c/d 表示從根節點開始查詢,一直查詢到 d 節點

?

?

XPATH 使用方法

查詢節點

獲取所有符合條件的節點

selectNodes(String?xpathExpression)? 返回 List 集合

獲取符合條件的單個節點

selectSingleNode(String?xpathExpression)? 返回一個 Node 對象。

如果符合條件的節點有多個,那么返回第一個。?

?

03?web 入門

WEB 應用,就是屬于 B/S 軟件結構

所有的客戶端和所有的服務器要通信,必須采用雙方認可的規則,即 HTTP (超文本傳輸協議)

?

Web 應用的特點

1_ 服務器響應客戶端的是 HTML

2_ 客戶端采用 URL 來定位全世界唯一的資源

3_ 為了便于記憶,不用 IP ,用域名來對 IP 進行封裝

4_ 客戶端與服務器都采用 HTTP 這種應用層的協議,底層是 TCP/IP 協議

?

web 網站上有二類資源,一類是動態資源,一類是靜態資源,

靜態資源用 html/css 技術完成,動態資源用 servlet/jsp/asp/php 技術完成,

凡是用 java 技術來開發 web 應用中的動態資源,統稱為 JavaWeb

?

客戶端訪問服務器,不管服務器是否有對應的資源,服務器都會給客戶端以響應,

所以響應可分為正確響應和錯誤響應

?

客戶端使用 URL 來訪問服務器的資源:以下例如:

http://www.baidu.com:8080/mail/index.html 回車

?

http:// 協議名稱,這只是 web 中最常用的協議,例如: https:// , ftp:// ,等等

www.baidu.com 全世界唯一的一個域名,通常一個域名對應著一個唯一的 IP 地址

8080 表示服務器上的一個資源所占用的端口號,通常是不變的, HTTP 協議默認端口號為 80

/mail 表示服務器上的一個資源的路徑

/index.html 表示服務器上的一個具體資源名稱

?

學習 Web 應用之前,為什么要用 Web 服務器呢?

因為如果 Web 服務器,不能將本地資源讀取出來,并響應給遠程的客戶端,

這時 Web 服務器相當于一個中介,接收客戶端的請求,并做出對應的響應

我們可以將 Web 服務器理解為本例的 Demo01 這么一個網絡應用程序

?

什么 JavaEE 規范?

JavaEE 規范表示多個具體技術的統稱,例如: Servlet , Jsp , JavaBean , JDBC JavaMail ,。。。。

?

04? 常見服務器簡介

oracle--WebLogic--- 適合于大型應用

ibm-----WebSphere--- 適合于大型應用

apache---tomcat--- 適合于小型應用 --- java 源免費

?

啟動 tomcat 服務器后,在瀏覽器地址欄輸入如下 URL http://127.0.0.1:8080 回車

127.0.0.1 是本機 IP 地址

localhost 是本機域名 ,在 tomcat 中默認的虛擬主機名字就叫做 localhost

192.168.32.9 局域網中本機 IP 地址

提倡用 127.0.0.1 這個

?

?

05?Tomcat 的安裝,啟動與目錄結構

?

通過瀏覽器訪問的應用,我們叫 web 應用,

這里說的瀏覽器可以是 PC 瀏覽器,也可以是移動設備上的瀏覽器

?

所有的 web 資源,都應該放在一個目錄下保存,該目錄我們叫 web 應用的根目錄,也叫網站的根目錄

?

創建好的 web 應用,必須將其根目錄放到 web 服務器管理,方可被外界訪問,這個過程叫 虛擬目錄的映射

?

06? Tomcat 中設置虛擬目錄和主機 / 網站 / 站點

<Context?

????????docBase=" 真實 web 應用根目錄所有的位置 "?

path=" / 開頭的虛擬目錄名字 "?/>

?

配置虛擬目錄

???修改 tomcat/conf/server.xml 文件

???<Host>

??? <Context?docBase="E:\mail"?path=""?/>

<Context?docBase="E:\mail"?path="/mail"?/>

<Context?docBase="E:\mail"?path="/xx/mail"?/>

<Context?docBase="E:\mail"?path="/xx/yy/mail"?/>

???</Host>

?

?

配置虛擬主機 / 網站,即 tomcat 服務器中有一個虛擬的 www.baidu.com 網站,目前只能供自己訪問,不能供外界訪問

???修改 tomcat/conf/server.xml 文件

???<Host?name="www.baidu.com"??appBase="E:\">

?????? <Context?docBase="E:\mail"?path=""?/>

<Context?docBase="E:\mail"?path="/mail"?/>

<Context?docBase="E:\mail"?path="/xx/mail"?/>

<Context?docBase="E:\mail"?path="/xx/yy/mail"?/>

???</Host>

???修改 C:\Windows\System32\drivers\etc\Hosts 文件

???#127.0.0.1?????www.baidu.com

???

?

???最終效果:

???http://www.baidu.com:8080/mail/index.html 回車

???http://www.baidu.com:8080/index.html 回車

???http://www.baidu.com/index.html 回車( HTTP 協議默認是 80 ,修改 tomcat 的端口號為 80

???http://www.baidu.com/index.html 回車( path=""

???http://www.baidu.com 回車(默認歡迎文件)

?

???www.baidu.com 虛擬主機 / 網站

???/mail 虛擬目錄

?

輸入域名,計算機的解析過程

瀏覽器先去本地找 Hosts 文件,將域名解析成 ip 地址

如果本地找不到,再去 internet dns 服務器找域名對應的 ip 地址

如果本地找到了,不去 internet 找了

07?web 應用結構以及在 MyEclipse 中創建 web 應用

??????

?

?

?

?

?

?

?

Dom4j? 的重點代碼賞析:

?

?

1.dom4j 基本使用

/**

?*? 演示使用 dom4j 如下內容

?*?1 )創建一個新的 xml 文件

?*?2 )將一個符合 xml 文件內容的字符串轉成 xml 文件

?*?3 )加載已存在的 xml 文件到內存,形成一個倒狀的樹結構,根就是 Document 對象

?*/

?

/**

?*?? 創建一個新的 xml 文件

?*/

public?static?void?type01()?throws?Exception?{

// 創建一個內存對象 Document ,它就表示硬盤中 xml 文件

Document?xmlDocument?=?DocumentHelper.createDocument();

// 將內存中的對象 Document 寫入到硬盤中,形成一個 xml 文件

XMLWriter?xmlWriter?=?new?XMLWriter(new?FileOutputStream(new?File("E:/new.xml")));

xmlWriter.write(xmlDocument);

xmlWriter.close();

}

?

/**

?*? 將一個符合 xml 文件內容的字符串轉成 xml 文件

?*/

public?static?void?type02()?throws?Exception?{

// 創建符合 xml 內容的字符串

String?str?=?"<root><city> 廣州 </city></root>";

// 將字符串轉成 document 對象

Document?xmlDocument?=?DocumentHelper.parseText(str);

// 將內存中的 document 對象輸出到硬盤,形成一個 xml 文件

XMLWriter?xmlWriter?=?new?XMLWriter(new?FileOutputStream(new?File("E:/new.xml")));

xmlWriter.write(xmlDocument);

xmlWriter.close();

}

?

/**

?*? 加載已存在的 xml 文件到內存,形成一個倒狀的樹結構,根就是 Document 對象

?*/

public?static?void?type03()?throws?Exception?{

// 創建 dom4j 核心解析器

SAXReader?saxReader?=?new?SAXReader();

// 讀取硬盤中的 xml 文件

Document?xmlDocument?=?saxReader.read(new?File("E:/bookstore.xml"));

// 判斷是否已讀取到 xml 文件

System.out.println(xmlDocument!=null?" 已讀取 xml 文件 ":" 未讀取 xml 文件 ");

}

?

?

?

/**

?*? 使用 dom4j 解析器

?*?1 )獲取根節點的名字?

?*?2 )獲取根節點下的直接子節點的個數

?*/

public?class?Demo02?{

public?static?void?main(String[]?args)?throws?Exception{

// 創建 dom4j 解析器對象

SAXReader?saxReader?=?new?SAXReader();

// 創建 InputStream 對象,指向硬盤的 xml 文件

InputStream?is?=?new?FileInputStream(new?File("E:\\bookstore.xml"));

// 通過字節流,加載硬盤中的 xml 文件到內存

Document?xmlDocument?=?saxReader.read(is);

// 獲取根節點

Element?rootElement?=?xmlDocument.getRootElement();

// 顯示根節點的名字

System.out.println(rootElement.getName());

// 獲取根節點下的直接子節點的個數和名字

List<Element>?list?=?rootElement.elements("book");

System.out.println(" 根節點下有 "+list.size()+" 直接子節點 ");

}

}

?

?

/**

?*? 使用 dom4j 解析器

?*?1 )解析所有 book 節點屬性值

?*?2 )解析所有 book 節點下子節點中的內容

?*/

public?class?Demo03?{

public?static?void?main(String[]?args)?throws?Exception{

// 創建 dom4j 解析器對象

SAXReader?saxReader?=?new?SAXReader();

// 創建 InputStream 對象,指向硬盤的 xml 文件

InputStream?is?=?new?FileInputStream(new?File("E:\\bookstore.xml"));

// 通過字節流,加載硬盤中的 xml 文件到內存

Document?xmlDocument?=?saxReader.read(is);

// 獲取根節點

Element?rootElement?=?xmlDocument.getRootElement();

// 獲取根節點下所有 book 子節點所形成的集合

List<Element>?list?=?rootElement.elements("book");

// 迭代

for(Element?element?:?list){

// 獲取 book 節點的 id 屬性值

String?id?=?element.attributeValue("id");

// 分別獲取 book 節點的 title/auth/price 子節點的內容

String?title?=?element.element("title").getText().trim();

String?auth?=?element.element("auth").getText().trim();

String?price?=?element.element("price").getText().trim();

// 將來我們可以將上述屬性值封裝到 JavaBean 對象中的所有屬性中,加入到 List<JavaBean> 集合

System.out.println(id+":"+title+":"+auth+":"+price);

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

}

}

}

?

/**

?*? 使用 dom4j 解析器

?*?1 )修改節點的屬性值

?*?2 )修改節點中的內容

?*?3 )將內存中的 document 對象,寫入到硬盤中的 xml 文件

?*/

public?class?Demo04?{

public?static?void?main(String[]?args)?throws?Exception{

// 創建 dom4j 解析器對象

SAXReader?saxReader?=?new?SAXReader();

// 創建 InputStream 對象,指向硬盤的 xml 文件

InputStream?is?=?

Demo04.class.getClassLoader().getResourceAsStream("cn/itcast/android/xml/bookstore.xml");

// 通過字節流,加載硬盤中的 xml 文件到內存

Document?xmlDocument?=?saxReader.read(is);

// 獲取根節點

Element?rootElement?=?xmlDocument.getRootElement();

// 獲取根節點下所有 book 子節點所形成的集合

List<Element>?list?=?rootElement.elements("book");

// 迭代

for(Element?element?:?list){

// 如果 book 節點的 id 屬性值是 "it201501" 的話

if(element.attributeValue("id").equals("it201501")){

// 修改 book 節點的 id 屬性值

element.addAttribute("id","it201601");

}

// 如果 book 節點的 price 子節點的內容為 222 的話

if(element.element("price").getText().equals("222")){

// 修改 book 節點的 price 子節點內容

element.element("price").setText("333");

}

}

// 上述修改只在內存中,還得將內存中的 document 對象寫入到硬盤的 xml 文件中

// 緊縮格式: createCompactFormat()

// 優美格式: createPrettyPrint()

OutputFormat?format?=?OutputFormat.createPrettyPrint();

OutputStream?os?=?new?FileOutputStream(new?File("E:/bookstore.xml"));

XMLWriter?xmlWriter?=?new?XMLWriter(os,format);

xmlWriter.write(xmlDocument);

xmlWriter.close();

}

}

?

/**

?*? 使用 dom4j 解析器

?*?1 )創建新節點,即 Element

?*?2 )為節點添加屬性和子節點

?*?3 )將新節點添加到所有原來節點之后和之前

?*/

public?class?Demo05?{

public?static?void?main(String[]?args)?throws?Exception{

// 創建 dom4j 解析器對象

SAXReader?saxReader?=?new?SAXReader();

// 創建 InputStream 對象,指向硬盤的 xml 文件

Document?xmlDocument?=?saxReader.read(Demo05.class.getClassLoader().getResource("cn/itcast/android/xml/bookstore.xml"));

// 獲取根節點

Element?rootElement?=?xmlDocument.getRootElement();

// 獲取根節點下的所有子節點

List<Element>?list?=?rootElement.elements("book");

?

?

// 創建新 book 節點

Element?newBookElement?=?DocumentHelper.createElement("book");

// 為新 book 節點設置屬性值?

newBookElement.addAttribute("id","it201503");

// 為新 book 節點添加子節點及其內容

newBookElement.addElement("title").setText("ios 編程指南 ");

?

?

// 將新 book 節點添加到所有 book 節點之后

//list.add(newBookElement);

?

// 將新 book 節點插入到第一個位置

list.add(1,newBookElement);

?

// document 對象輸出到硬盤中,形成 xml 文件

OutputFormat?format?=?OutputFormat.createPrettyPrint();

OutputStream?os?=?new?FileOutputStream(new?File("E:/bookstore.xml"));

XMLWriter?xmlWriter?=?new?XMLWriter(os,format);

xmlWriter.write(xmlDocument);

xmlWriter.close();

}

}

?

XPATH 用法

/**

?*? 使用 dom4j 解析器

?*? 傳統方式定位 d 標簽

?*?XPATH 方式定位 d 標簽

?*/

public?class?Demo06?{

public?static?void?main(String[]?args)?throws?Exception{

// 創建 dom4j 解析器對象

SAXReader?saxReader?=?new?SAXReader();

// 創建 InputStream 對象,指向硬盤的 xml 文件

Document?xmlDocument?=?

saxReader.read(

Demo06.class.getClassLoader().getResource("cn/itcast/android/xml/tv.xml"));

//Element?rootElement?=?xmlDocument.getRootElement();

//String?name?=?rootElement.element("a").element("b").element("c").element("d").getText().trim();

//System.out.println(name);

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

//String?xpath?=?"/tv/a/b/c/d";

//String?xpath?=?"http://d";

//String?age?=?"23";

//String?xpath?=?"http://d[@age='"+age+"']";

String?xpath?=?"http://e[@name=' 哈哈 '?and?@pass='123']";

Element?element?=?(Element)?xmlDocument.selectSingleNode(xpath);

//List<Element>?list?=?xmlDocument.selectNodes(xpath);

if(element!=null){

String?name?=?element.getText().trim();

System.out.println(name);

}else{

System.out.println(" 查無此人 ");

}

}

}

?

輕裝上陣,安卓工程師之路---day05(Dom4J & Tomcat)


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。?!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲精品久久久久久久无 | 轻轻色在线视频中文字幕 | 一区二区三区乱码 | 337p色噜噜人体大胆欧美 | 色好看在线视频播放 | 欧洲黄色毛片 | 免费国产免费福利视频 | 欧美一级毛片一 | 日日摸夜夜摸狠狠摸97 | 亚洲精品一区二区三区香蕉在线看 | 黄色a毛片 | 狠狠色成人综合网图片区 | 在线欧美v日韩v国产精品v | 69日本人xxxx16-18| 久久久久久99精品 | 欧美日韩一区二区高清视 | 久操福利 | 激情综合色综合啪啪开心 | 老子午夜伦不卡影院 | 一级免费大片 | 亚洲夜夜骑 | 午夜精品久久久久久 | 亚洲品质自拍视频 | 妖精www视频在线观看高清 | 亚洲综合成人网 | 亚洲成a人在线播放www | 一级特级aa欧美毛片 | 国产成+人欧美+综合在线观看 | 国产美女精品在线 | 亚洲爱爱天堂 | 亚洲国产精品成人综合色在线婷婷 | 日日草夜夜操 | 国产在线小视频 | 色播影音| 91情国产l精品国产亚洲区 | 国产精品久久久亚洲第一牛牛 | 久九九久福利精品视频视频 | 国产成人看片免费视频观看 | 不卡伦理 | 国产91一区二这在线播放 | 国产精品v |