Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
E和FierFox瀏覽器對(duì)于這裝載同域的XML文件和裝載XML字符串這兩種情況,分別有各自的處理方式。IE的解析器支持XML文件和XML字符串的加載,而火狐瀏覽器使用單獨(dú)的解析器把XML載入內(nèi)存,然后轉(zhuǎn)換為可通過JS訪問的XML DOM對(duì)象。
以下是js代碼:
/* * 封裝IE和Firefox類瀏覽器中裝載同域XML或XML字符串的方法, * @param flag true表示裝載XML的文件,false表示裝載XML的字符串 * @param xmldoc flag為true表示XML文件的路徑,flag為false表示XML字符串 */ function loadXML(flag,xmldoc){ if(window.activeXObject) { //IE瀏覽器 //創(chuàng)建空的XML對(duì)象 var activexName = ["MSXML2.DOMDdcument","Miscrosoft.XmlDom"]; var xmlObj; for(var i = 0; i < actviexName.length;i++){ try{ xmlObj = new ActiveXObject(activeName[i]); break; }catch(e){ } } if(xmlObj){ //同步方式裝載XML數(shù)據(jù),確保在文檔完全加載之前解析器不會(huì)繼續(xù)腳本的執(zhí)行 xmlObj.async = false; if(flag){ //load用于加載文件,loadXML用于加載字符串 //裝載XML文件 xmlObj.load(xmldoc); }else{ //裝載XML的字符串 xmlObj.loadXML(xmldoc); } //返回根節(jié)點(diǎn) return xmlObj; //返回根元素節(jié)點(diǎn) return xmlObj.documentElement; }else{ alert("裝載XML文檔的對(duì)象創(chuàng)建失敗"); return null; } }else if(document.implementation.creatDocument){ //針對(duì)Firefox類瀏覽器 var xmlObj; if(flag){ //裝載XML文件 //先創(chuàng)建一個(gè)空的xml dom對(duì)象 xmlObj = document.implementation.creatDocument("","",null); if(xmlObj){ //同步方式進(jìn)行裝載 xmlObj.async = false; xmlObj.load(xmldoc); return xmlObj.documentElement; }else{ alert("裝載XML文檔的對(duì)象創(chuàng)建失敗"); return null; } }else{ //裝載XML的字符串 //創(chuàng)建一個(gè)dom解析器 xmlObj = new DOMParser(); //把xml字符串解析成要返回的dom對(duì)象 var docRoot = xmlObj.parerFromString(xmldoc,"test/xml"); return docRoot.documentElement; } } alert("裝載XML文檔的對(duì)象創(chuàng)建失敗"); return null; }
html代碼
<html> <head> <title>TODO supply a title</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <script type="text/javascript" src="load.js"></script> <script type="text/javascript"> function test(){ //裝載同域的XML文件 var domxml1 = loadXML(true,"test.xml"); //裝載XML字符串 var domxml2 = loadXML(true,"<xml>123</xml>"); alert(""); } </script> </head> <body> <input type="button" value="test" onclick="test()"/> </body> </html>
XML頁(yè)內(nèi)容
<?xml version="1.0" encoding="UTF-8"?> <root> 木子松就是我,我就是木子松 </root>
總結(jié)
對(duì)于裝載同域的XML文件,IE瀏覽器和火狐類瀏覽器都是先創(chuàng)建一個(gè)空的XML文檔對(duì)象,然后用“xmlDoc.load(“**.xml”)”告知解析器加載名為**.xml的XML文檔
對(duì)于裝載XML字符串,IE瀏覽器和裝載XML文件的方式一樣,利用微軟內(nèi)建的解析器加載XML字符串;而火狐類瀏覽器,則是通過"var parser = new DOMParser()"創(chuàng)建dom解析器,然后利用方法parserFromString()加載 XML字符串。另外DOMParser對(duì)象的load()方法可用于加載文件。
跨域訪問處于安全方面的原因,現(xiàn)在的瀏覽器不允許跨域訪問。如果想跨域訪問,則必須把XML文件放到自己的服務(wù)器上,否則,xmlDoc.load()將產(chǎn)生錯(cuò)誤“Access is denied”。
ML;
是什么?
Extensible Markup Languare 可擴(kuò)展標(biāo)記型語(yǔ)言
為什么要有XML?
1.HTML的標(biāo)簽是固定的,不可以改變,也不可以進(jìn)行一個(gè)···擴(kuò)展
2.HTML語(yǔ)法松散
作用;
制作配置文件;如組件類。。。。。
存儲(chǔ)數(shù)據(jù);存儲(chǔ)少量的數(shù)據(jù)
◆◆◆注;XML不是HTML的升級(jí)版,因?yàn)閼?yīng)用的領(lǐng)域不一樣。
XML是描寫關(guān)系型的數(shù)據(jù)
HTML是描述頁(yè)面的數(shù)據(jù)顯示效果
--------------------------------------------XML和HTML的區(qū)別--------------------------------------------------------------------
XML和HTML的區(qū)別;
A、HTML是將數(shù)據(jù)和顯示的效果混合在一起,描述了數(shù)據(jù)的顯示效果,
-----而且標(biāo)簽是固定,而且語(yǔ)法松散
B、XML是將數(shù)據(jù)和顯示的效果是分離的,只是描述了數(shù)據(jù)之間的關(guān)系和存儲(chǔ)的格式,
-----沒有描述數(shù)據(jù)的顯示效果,沒有一套具體的標(biāo)簽,只是一個(gè)規(guī)范。
XML適用金融,科學(xué)等有關(guān)系型的領(lǐng)域
XML的重點(diǎn)是;處理數(shù)據(jù),和數(shù)據(jù)結(jié)構(gòu)
◆注;引入外部CSS文件,對(duì)XML標(biāo)簽進(jìn)行一個(gè)修飾,
<>xml-stylesheet tyep = "text/css" href = "">
--------------------------------------------XML的特點(diǎn)--------------------------------------------------------------------
XML特點(diǎn);
1.語(yǔ)法嚴(yán)謹(jǐn),區(qū)分大小寫
2.標(biāo)簽名可以是中文
3.文件后綴是 .xml
4.換行也是算一個(gè)元素
5.可以自定義標(biāo)簽
6.id不可以以數(shù)字開頭
存儲(chǔ)數(shù)據(jù)的方式;
* XML 存儲(chǔ)關(guān)系型的數(shù)據(jù)
* properties 存儲(chǔ)key,value的數(shù)據(jù)
* 文本 什么都可以存儲(chǔ)
* 數(shù)據(jù)庫(kù)
--------------------------------------------XML的語(yǔ)法--------------------------------------------------------------------
XML語(yǔ)法;
1.文檔聲明 Document declaration;
版本 編碼集 是否與其他文件關(guān)聯(lián)
<?xml vaersion = "1.0" encoding = "編碼集" standalone = "no默認(rèn)" ?>
2.元素 Element;
1.自定義標(biāo)簽;建議標(biāo)簽名全部小寫,保持與HTML的書寫習(xí)慣,
因?yàn)槌霈F(xiàn)同名的大小寫不便于閱讀
2.成對(duì)出現(xiàn)
3.閉合標(biāo)簽和結(jié)束體標(biāo)簽
4.符合邏輯嵌套
3.屬性 Attribute;
1.屬性名小寫,屬性也是可以自定義的,
2.屬性值要使用 "" 或 '',id不可以以數(shù)字開頭
3.多個(gè)屬性要使用 空格 隔開
4.可以將屬性作為一個(gè)子標(biāo)簽,因?yàn)閄ML用途不是用于顯示頁(yè)面的
4.注釋 Comment;
1.<!-- --> 和HTML一樣
2.注釋不可以嵌套
5.CDATA;
1.XML的轉(zhuǎn)義字符基本和HTML一致。
2.如果需要轉(zhuǎn)義的字符太多了則可以使 CDATA
3.CDATA可以將一段字符串原樣的輸出
<![CDATA[字符串]]>
6.處理指令;
1.處理指令時(shí)告知解析引擎是要如何處理文檔的。
2.處理指令必須使用 <? ?>
<?xml-stylesheet type = "text/css" href = "路徑">
◆注;
1.XML必須要有一個(gè)根節(jié)點(diǎn)
2.XML不會(huì)在頁(yè)面顯示
3.縮進(jìn)寫法適合閱讀
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■↓↓↓↓↓↓XML—— 文件結(jié)構(gòu)↓↓↓↓↓↓↓↓■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
◆◆◆注; XML文檔必須要有一個(gè)根節(jié)點(diǎn)◆◆◆
XML文件結(jié)構(gòu);
Node
|--- Element
|--- Attr
|--- Comment
|--- Text
|--- Document
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■↓↓↓↓↓↓XML—— 解析技術(shù)↓↓↓↓↓↓↓↓■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
xml解析;
為什么要有?
因?yàn)閄ML主要是用于存儲(chǔ)數(shù)據(jù),做配置文件.......
那么XML的數(shù)據(jù)的···取出···可以通過解析技術(shù)可以實(shí)現(xiàn).....
而讀取XML文件;
1.IO ---- 讀取出來的數(shù)據(jù)不是理想的數(shù)據(jù)。
2.DOM解析 ---- DOM4J 是一個(gè)開源的解析技術(shù)
3.SAX解析 ---- SAX 是SUN公司定義的,比較規(guī)范,SAX里面也是有使用了DOM4J的技術(shù)
解析技術(shù);
1.DOM4J 是一個(gè)開源組織的
2.JAXP 是SUN公司定義的
|-- DOM
|-- SAX
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■↓↓↓↓↓↓DOM—— 解析技術(shù)↓↓↓↓↓↓↓↓■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
DOM解析;
特點(diǎn);1.是一次性裝載這個(gè)文件到內(nèi)存中,不利于大文件存取操作,
2.適合增刪改查,因?yàn)橐淮问钦麄€(gè)文件加載,無需在到硬盤對(duì)文件中的內(nèi)容一個(gè)一個(gè)去查找
3.在內(nèi)存中是一棵倒掛的樹
4.DOM是解析XML的底層接口之一
5.是W3C定義的
6.DOM是一個(gè)規(guī)范,而DOM4J是一個(gè)實(shí)現(xiàn)了這個(gè)規(guī)范的解析技術(shù)
DOM4J;
1.是DOM解析的一個(gè)實(shí)現(xiàn)解析技術(shù)(如同實(shí)現(xiàn)類)
2.特點(diǎn)和DOM一樣,也是一棵倒立的樹型形狀。
3.不是W3C定義的,是一個(gè)開源團(tuán)隊(duì)發(fā)布的
DOM4J;也是一個(gè)組件,而這個(gè)組件也是需要下載的,
-----------------------------------------------DOM4J獲取XML文件的方式--------------------------------------------------------------------
◆◆◆注;注意導(dǎo)包的路徑。
DOM4J獲取文件的三種方式;
1.通過解析器的方法傳入一個(gè)絕對(duì)路徑
a.創(chuàng)建解析器
★ SAXReader sr = new SAXReader();
b.調(diào)用解析器的read方法獲取XML文檔,使用文檔對(duì)象接收
★ Document doc = sr.read("絕對(duì)路徑");
2.通過解析器的方法傳入一個(gè)相對(duì)路徑
a.創(chuàng)建解析器
★ SAXReader sr = new SAXReader();
b.調(diào)用解析器的read()方法,獲取到XML文檔,使用文檔對(duì)象接收
★ Document doc = sr.read("相對(duì)路徑");
3.通過類的getResourceAsStream("/文件名")方法
a.通過運(yùn)行時(shí)類的對(duì)象的getResourceAsStream()的方法
---獲取到這個(gè)XML文檔的流
★InputStream is = 類名.class.getResourceStream("/文件名");
b.創(chuàng)建解析器
★ SAXReader sr = new SAXReader();
c.調(diào)用解析器的read()方法傳入獲取到的XML文件流,使用文檔對(duì)象接收
★ Document doc = sr.read(is);
------------------------------------------DOM4J獲取XML文件的元素方法--------------------------------------------------------------------
◆◆◆注;必須要先獲取到根節(jié)點(diǎn),在根據(jù)根節(jié)點(diǎn)獲取到其他節(jié)點(diǎn) ◆◆◆
DOM4J獲取元素方法; --- 使用Element Object調(diào)用
1.getRootElement() 獲取到根節(jié)點(diǎn)
2.elements(寫/沒寫) 只能寫子標(biāo)簽,不可以寫孫標(biāo)簽
沒寫;獲取到所有的子標(biāo)簽標(biāo)簽 返回的是一個(gè)集合
寫了;獲取到指定標(biāo)簽名的所有標(biāo)簽
3.getName(); 獲取到標(biāo)簽名
4.elementText() 獲取到標(biāo)簽的內(nèi)容
5.element() 獲取到指定標(biāo)簽
6.elementById() 獲取到指定的Id標(biāo)簽
7.elementIterator() 獲取到標(biāo)簽迭代器
8.getQName() 獲取到標(biāo)簽名
獲取屬性的方法;----使用 Element Object調(diào)用
1.attributeValue() 獲取到指定的屬性的值
2.attirbutes() 獲取到所有的屬性
添加的方法;----使用 Element Object 調(diào)用
1.addElement() 添加元素
2.addAttribute() 添加屬性
3.addCDATA() 添加CDATA
4.addText() 添加標(biāo)簽內(nèi)容
直接刪除元素方法;使用獲取到的元素對(duì)象,
◆ 調(diào)用detach()方法可以刪除這個(gè)元素和這個(gè)元素的所有子元素。
如;element.detach()
------------------------------------------DOM4J刷新文件--------------------------------------------------------------------
DOM4J刷新文件;
1.聲明文件內(nèi)容的寫入格式。
a.縮進(jìn)格式;
OutputFormat of = OutputFormat.createPrettyPrint();
b.行內(nèi)格式;
OutputFormat of = OutputFormat.createCompactFormat();
2.創(chuàng)建寫入器
XMLWriter writer = new XMLWriter("FileStream_Path","OutputFormat_Obj");
3.調(diào)用寫入器的方法寫入重寫寫入文件
writer.write("Document_Obj");
◆注;
1.將獲取到的XML文檔對(duì)象的內(nèi)容轉(zhuǎn)換成一個(gè)字符串
String Document.asXML();
2.將字符串轉(zhuǎn)換成一個(gè)XML文檔對(duì)象
Document.DocumentHanper.parseText("String_Obj");
------------------------------------------DOM4J創(chuàng)建 --> 寫入過程--------------------------------------------------------------------
◆◆◆注意導(dǎo)包◆◆◆
1.創(chuàng)建解析器對(duì)象;
SAXReader reader = new SAXReader()
2.調(diào)用解析器方法獲取到XML文檔;
Document doc = reader.read("String_Path");
3.獲取到根路徑;
Element doc.getRootElement();
---4.1;將獲取到的文檔對(duì)象轉(zhuǎn)換成字符串
String doc.asXML();
---4.2;將字符串解析成一個(gè)XML文檔對(duì)象
Document DocumnetHanper.parseText("String");
5.規(guī)定寫入XML文件的格式;
1.OutputFormat of = OutputFormat.createPattryPrint(); --- 縮進(jìn)格式
2.OutputFormat of = OutputFormat.createCompactFormat(); --- 行內(nèi)格式
6.創(chuàng)建寫入器;
XMLWriter writer = new XMLWriter("FileStream_Path",OutputFormat);
7.調(diào)用寫入器的寫入XML文件的方法;
writer.wirte(Document);
8.關(guān)閉流;
writer.close();
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■↓↓↓↓↓↓Xpath—— 查詢表達(dá)式↓↓↓↓↓↓↓↓■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
Xpath;
為什么要有?
在DOM4J中加載文件時(shí),直接加載整個(gè)文件到內(nèi)存中的,不便于獲取某一個(gè)指定的節(jié)點(diǎn)。
什么是Xpath?
1、是一個(gè)查詢表達(dá)式語(yǔ)言,也是一個(gè)開源的語(yǔ)言
2、在DOM4J中融合了這個(gè)Xpath這個(gè)查詢表達(dá)式語(yǔ)言
3、這個(gè)語(yǔ)言也是一個(gè)組件來的,但是在DOM4J組件中已經(jīng)附帶了
dom4J --- lib --- jaxen-1.1-beta-6.jar
作用;
可以通過Xpath表達(dá)式快速定位到某一個(gè)XML文件的節(jié)點(diǎn)。
------------------------------------------Xpath—— 表達(dá)式符號(hào) --------------------------------------------------------------------
表達(dá)式符號(hào);
//x 相對(duì)定位到某節(jié)點(diǎn)
/x 絕對(duì)定位絕對(duì)定位到某一個(gè)節(jié)點(diǎn)
/* 是所有節(jié)點(diǎn)
[num] 第N個(gè)節(jié)點(diǎn)
[@x] 選中到某一個(gè)屬性
normalize-span 去空格
[text()] 獲取到內(nèi)容
------------------------------------------Xpath—— 使用 --------------------------------------------------------------------
Xpath的使用;
DOM4J的selectNodes("表達(dá)式"); 方法
DOM4J的selectSingleNode("表達(dá)式"); 方法
Document .selectNodes() ------ 是返回所有節(jié)點(diǎn)的集合
Document .selectSingleNode("表達(dá)式") ----- 返回某一個(gè)具體的節(jié)點(diǎn)
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■↓↓↓↓↓↓JAXP —— 解析技術(shù)↓↓↓↓↓↓↓↓■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
JAXP解析技術(shù);
是Sun公司開發(fā)的,是XML文檔解析技術(shù)的一個(gè)集合統(tǒng)稱。
包含;
DOM解析
一次性讀取整個(gè)文件到內(nèi)存中。
SAX解析
讀取一行,解析一行,處理一行。
這2項(xiàng)解析技術(shù)都是由SUN公司制定的,較規(guī)范
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■↓↓↓↓↓↓JAXP——SAX —— 解析技術(shù)↓↓↓↓↓↓↓↓■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
SAX解析技術(shù);
為什么要有?
1.DOM4J不適合大文件的讀取,因?yàn)橐淮涡约虞d整個(gè)文件。
是什么?
1.Simple API For XML 簡(jiǎn)單的解析XML文檔API,是由SUN公司定義的一個(gè)解析技術(shù),較規(guī)范。
2.也是融合了DOM4J的部分技術(shù)。
作用;
用于解析XML文檔的一個(gè)解析技術(shù)
特點(diǎn);
一次讀取一行,解析一行,處理一行。
適合大文件的存取,不適合增刪改查。
◆注;由于是SUN公司開發(fā)的,而在Eclipse或MyEclipse中已經(jīng)有了組件。
◆◆◆◆◆注;SAX解析主要是用于查詢,一般都不使用寫入操作,因?yàn)橐话愕腦ML文件都不會(huì)太大
-----------------------------------------SAX獲取XML文件的方式--------------------------------------------------------------------
SAX獲取XML文件的方式;
只有 2 種,傳入的字符串是···絕對(duì)路徑···或···相對(duì)路徑···
-----------------------------------------SAX獲取XML文件的流程 --------------------------------------------------------------------
SAX獲取XML文件的流程;
因?yàn)槭荢UN公司定義的所以也較規(guī)范,也定義了獲取XML文件的流程
1.獲取到解析器工廠對(duì)象
SAXParserFactory spf = SAXParserFactory.newInstance();
2.通過解析器工廠對(duì)象獲取到具體的解析器對(duì)象
SAXParser sp = spf.newSAXParser();
3.通過具體的解析器對(duì)象,獲取到讀取器
XMLReader reader = sp.getXMLReader()
4.通過調(diào)用讀取器的setContentHandler(obj)方法設(shè)置事件處理
reader.setContentHandler(obj);
5.調(diào)用讀取器的解析方法,解析XML文件
reader.parse("絕對(duì)路徑/相對(duì)路徑");
◆注;具體的事件處理在繼承事件處理接口·下·的具體實(shí)現(xiàn)類,的類中定義
事件處理;
在SAX中引入了一個(gè)事件處理的概念,是用于對(duì)文件的內(nèi)容進(jìn)行的處理。
1.在調(diào)用解析文件parse()的方法,時(shí)會(huì)觸發(fā)事件處理方法中的對(duì)象的···主要三個(gè)方法···
2.而事件處理ContenHandler是一個(gè)接口,
如果實(shí)現(xiàn)這個(gè)了接口則需要實(shí)現(xiàn)這個(gè)接口的所有方法
所以可以實(shí)現(xiàn)這個(gè)接口的具體的實(shí)現(xiàn)類。
主要三個(gè)方法;
startElement(String uri, String localName, String qName,
Attributes attributes) ----- 獲取到開始標(biāo)簽
characters(char[] ch, int start, int length) ----- 獲取到標(biāo)簽內(nèi)容
endElement(String uri, String localName, String qName)
----- 獲取到結(jié)束標(biāo)簽
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■↓↓↓↓↓↓JAXP——DOM —— 解析技術(shù)↓↓↓↓↓↓↓↓■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
JAXP-DOM解析技術(shù);
為什么要有?
1.在SUN公司定義了一個(gè)SAX解析,而這個(gè)解析的特點(diǎn)是,每次讀取一行,
而不便于增刪改。。。。。
2.而不用DOM4J,因?yàn)槿绻鞘褂肧UN公司定義的標(biāo)準(zhǔn)較規(guī)范,
3.使得代碼便于閱讀,因?yàn)樵陂喿x是不必查看是使用什么技術(shù)。。。。。
4.在未來的開發(fā)中統(tǒng)一使用SUN公司的技術(shù),可以使得兼容性問題的風(fēng)險(xiǎn)降低。。
是什么?
JAXP-DOM解析技術(shù)是由SUN公司開發(fā)的,里面融合了DOM4J的部分技術(shù)
作用;
可以用于解析XML文檔。
特點(diǎn);
1.一次性加載整個(gè)XML文檔到內(nèi)存中。
2.不適合大的文檔存取,適合增刪改查
3.也是一個(gè)倒立的樹型結(jié)構(gòu)。
4.也是遵循DOM規(guī)范的。
------------------------------ JAXP——DOM —— 創(chuàng)建->獲取XML文檔流程 -------------------------------------------------------------------
Jaxp-DOM創(chuàng)建流程;
1.獲取到Jaxp_DOM解析工廠對(duì)象
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
2.通過解析工廠對(duì)象獲取到具體的解析器對(duì)象
DomcumentBuilder db = dbf.newDocumentBuilder();
3.通過解析器的解析XML文檔的方法獲取到XML文檔
Document doc = db.parse("絕對(duì)路徑/相對(duì)路徑")
操作文檔元素的方法;
參考;Java_API ---> Document對(duì)象,中的方法
和DOM4J/SAX類似
◆◆◆注;不可以使用通過類名獲取到文件輸入流對(duì)象
Node n = doc.getElementsByTagName("節(jié)點(diǎn)名")[num];
-------------------------------- JAXP——DOM —— 創(chuàng)建->寫入XML文檔流程 --------------------------------------------------------------------
JAXP-DOM創(chuàng)建-寫入;
1.獲取到JAXP-DOM解析工廠接口對(duì)象
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
2.通過解析工廠的對(duì)象獲取到具體的解析器對(duì)象
DocumentBuilder bd = dbf.newDocumentBuilder();
3.使用解析器對(duì)象的parse()方法,獲取到XML文檔的對(duì)象
Document doc = bd.parse(絕對(duì)路徑/相對(duì)路徑);
4.1.在JAXP-DOM的中加入了插入的insertBefore();的方法
a.創(chuàng)建節(jié)點(diǎn)
Element_Obj.createElement("結(jié)點(diǎn)名");
b.獲取到參考節(jié)點(diǎn)
c.獲取到某一個(gè)節(jié)點(diǎn)(父節(jié)點(diǎn))
Element ele = doc.getDocumentElement();
d.通過父節(jié)點(diǎn)插入某一個(gè)節(jié)點(diǎn)
ele.insertBefore(插入的節(jié)點(diǎn),參考節(jié)點(diǎn));
5.創(chuàng)建寫入工廠對(duì)象 【transformer 轉(zhuǎn)換模型】
TransformerFactory tff = TransformerFactory.newInstance();
6.通過工廠對(duì)象獲取到具體的寫入對(duì)象
Transformer tf = tff.newTransformer();
<------
7.調(diào)用寫入對(duì)象的write方法寫入
▲--> tf.write(new DOMSource("源文件路徑"),new StreamResult(new FileOutputStream("目標(biāo)路徑")));
◆◆◆注;
1.new DOMSource() 是一個(gè)類,而這個(gè)類可以關(guān)聯(lián)要轉(zhuǎn)換的Document對(duì)象
2.new StreamResult() 是一個(gè)類,可以表示數(shù)據(jù)寫出的目的地。
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■↓↓↓↓↓↓ XML —— 約束↓↓↓↓↓↓↓↓■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
XML約束;
為什么要有?
在XML文檔中的標(biāo)簽可以隨意定義,使得文檔不規(guī)范,
也避免用戶輸入有誤,提高用戶的體驗(yàn)性。
如;在描述人職業(yè)的XML文檔中,用戶不小心寫錯(cuò)了或有人故意破壞,寫了個(gè)動(dòng)物標(biāo)簽。
什么是XML約束?
規(guī)定(規(guī)范)XML文檔的書寫格式。
作用;
使得文檔變得規(guī)范,便于閱讀,提高用戶的體驗(yàn)性。
主流約束;
DTD
是一個(gè)控制不是很精準(zhǔn)的一個(gè)約束技術(shù)
文件后綴是 .dtd
Scheme
是一個(gè)控制精準(zhǔn)的一個(gè)約束技術(shù),逐步的取代DTD
文件后綴是 .xsd
◆◆◆注;叫是叫Scheme而在書寫scheme約束文檔時(shí)是寫schema
----因?yàn)镾chema的意思更加具體。
schema :模式,計(jì)劃
scheme :計(jì)劃,策劃,體制
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■↓↓↓↓↓↓ DTD —— 約束↓↓↓↓↓↓↓↓■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
DTD約束;
是什么?
Document Type Definition 文檔類型定義
作用;
用于規(guī)定(規(guī)范)一個(gè)XML文檔的書寫格式
特點(diǎn);
對(duì)文檔的內(nèi)容控制不夠精準(zhǔn)是,如做不到內(nèi)容的控制等。
--------------------------------------------DTD文檔定義 --------------------------------------------------------------------
DTD文檔定義;
1.常用的數(shù)據(jù)類型;
(#PCDATA) 可變長(zhǎng)度的字符串
EMPTY 空類型 【一般用于定義閉合標(biāo)簽】
ANY 任意類型
2.常用的定義符號(hào);
? 0或1
+ 1或N
* 0或N
() 必須出現(xiàn) 1次
3.常用的定義元素的關(guān)鍵字;
ELEMENT 定義元素
ATTLIST 定義元素的屬性
◆注;
1.都是大寫
2.一個(gè)標(biāo)簽名可以同時(shí)使用2個(gè),
因?yàn)椋籈LMENT是定義元素
ATTLIST 是定義元素的屬性
4.定義屬性常用的關(guān)鍵字;
1.#REQUIRED 必須給這個(gè)標(biāo)簽定義該屬性
2.#IMPLIED 這個(gè)屬性可寫可不寫
3.#Fixed 給這個(gè)屬性定義一個(gè)固定值
--------------------------------------------DTD文檔引入方式 --------------------------------------------------------------------
DTD文檔引入方式;
1.外部引入;
<!DOCTYPE 根名 SYSTEM "文件名">
2.內(nèi)部定義;
<!DOCTYPE 根名[
<!ELEMENT 根名(子標(biāo)簽)>
<!ELEMENT 子 (#PCDATA)>
]>
3.外部引入;key --- value
<!DOCTYPE 根名 PUBLIC "名稱空間【唯一】" "文件名">
--------------------------------------------DTD文檔定義 --------------------------------------------------------------------
1.文件后綴是DTD
<!ELEMENT 書名 (作者+,價(jià)格?)>
<!ElEMENT 作者 (#PCDATA)>
<!ATTLIST 作者 titile CDATA #IMPLIED>
<!ELEMENT 價(jià)格 (#PCDATA)>
2.DTD文件沒有注釋
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■↓↓↓↓↓↓ Scheme —— 約束↓↓↓↓↓↓↓↓■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
Scheme約束;
為什么要有?
1.DTD約束對(duì)XML的格式控制不夠精準(zhǔn)
2.使得用戶可選擇性更多,因?yàn)镾cheme也比較麻煩
是什么?
Scheme;體制,策劃
作用;
規(guī)范(規(guī)定)XML的文檔書寫格式
為什么說Scheme控制更加精準(zhǔn)?
1.可選擇規(guī)定的內(nèi)容類型更多
2.內(nèi)容類型的控制
3.內(nèi)容的規(guī)定
特點(diǎn);
1.文件后綴是.xsd
2.scheme文件的也是屬于一個(gè)XML文件,因?yàn)槁暶魈幣cXML一樣
3.文件的根節(jié)點(diǎn)一定是【schema】
◆◆◆注;不要寫成scheme ,
scheme 是策劃,計(jì)劃,體制
schema 是 計(jì)劃,模式
--------------------------------------------Scheme文檔定義 --------------------------------------------------------------------
Scheme文檔定義;
1.可以指定一個(gè)自定義名
2.xmlns 的W3C域名是固定的格式,不可以改變
3.targetNamespace 域名名稱空間可以自定義,但是是要求唯一的
4.elementFormDefault 是固定的格式
5.根標(biāo)簽一定要是 【schema】
常用關(guān)鍵字解析;
sequence 序列;
是指定約束XML文件定義節(jié)點(diǎn)時(shí)
按照一個(gè)什么順序進(jìn)行一個(gè)定義
complextype 復(fù)雜類型;
是在xsd文檔聲明這個(gè)節(jié)點(diǎn)下有子節(jié)點(diǎn)。
name;
是標(biāo)簽名
type;
是標(biāo)簽內(nèi)容類型
★注;type如果設(shè)置成數(shù)值型(double,decimal....)的,一般都是要顯示的賦值
常見的單詞
Ocuurs 重視的意思
decimal 小數(shù)
--------------------------------------------Scheme文檔開頭解析 --------------------------------------------------------------------
xs是自定義的一個(gè)標(biāo)識(shí)符
名稱空間是一個(gè)key,保證唯一性用于約束XML文檔時(shí),XML文檔找到這個(gè)文檔
<?xml version = "1.0" encoding = "UTD-8"> ----- 指定文檔類型
<xs:schema xmlns:xs = "http://www.w3.org/2001/XMLSchema" ----- 固定的格式
targetNamespace = "自定義" ----- 自定義域名,用于標(biāo)識(shí),
|====一般是域名,保證在網(wǎng)絡(luò)上的唯一性
elementFormDefault = "qualified" ----- 固定格式,qualified;合格
>
</xs:schema>
----------------------------------XML文檔 —— 引用 —— Scheme文檔 --------------------------------------------------------------------
1.my ----- 是自定義的一個(gè)名字,可以用于在引入多個(gè)約束文件時(shí),可以區(qū)分
2.xis ----- 是自定義的,也是可以用于在引入多個(gè)約束文件時(shí)區(qū)分,
3.xmlns:xis = "http://www.w3.org/2001/XMLSchema-instance"
----- 是固定格式
4.xis:schemaLacation ----- 引入一個(gè)本地的文件,通過使用 名稱空間 + 文件名 指定 key + value
<my:schema 【根名】 xmlns:my = "scheme文檔的名稱空間值"
xmlns:xis = "http://www.w3.org/2001/XMLSchema-instance"
xis:schemaLacation = "scheme文檔名稱空間 文件名"
>
</my:scheme>
TML和XML都是用于描述和組織數(shù)據(jù)的標(biāo)記語(yǔ)言,但它們之間有著許多區(qū)別。本文將詳細(xì)介紹HTML和XML的區(qū)別,包括語(yǔ)法、標(biāo)記、應(yīng)用場(chǎng)景等方面。
HTML和XML都是標(biāo)記語(yǔ)言,但它們的語(yǔ)法有所不同。
HTML是一種超文本標(biāo)記語(yǔ)言,其語(yǔ)法由預(yù)定義的標(biāo)記組成,標(biāo)記通常用于指定文本的結(jié)構(gòu)、樣式和鏈接。HTML標(biāo)記由尖括號(hào)包圍,其中有些標(biāo)記是成對(duì)出現(xiàn)的,例如<html></html>,有些標(biāo)記是單獨(dú)出現(xiàn)的,例如<img>。HTML標(biāo)記有一定的語(yǔ)義含義,例如<h1>表示文本為一級(jí)標(biāo)題,<p>表示文本為段落等。
XML是一種可擴(kuò)展標(biāo)記語(yǔ)言,其語(yǔ)法由用戶定義的標(biāo)記組成,標(biāo)記通常用于指定數(shù)據(jù)的結(jié)構(gòu)和屬性。XML標(biāo)記同樣由尖括號(hào)包圍,但其所有標(biāo)記都必須成對(duì)出現(xiàn),例如<name>haiyong</name>。XML標(biāo)記沒有預(yù)定義的語(yǔ)義含義,用戶可以根據(jù)需要自定義標(biāo)記。
HTML和XML在文檔類型定義方面也有所不同。
HTML的文檔類型定義是預(yù)定義的,即文檔類型定義已經(jīng)由W3C(萬維網(wǎng)聯(lián)盟)定義好了。HTML文檔通常使用DOCTYPE聲明指定文檔類型,例如HTML 4.01的聲明為:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
XML的文檔類型定義是由用戶定義的,用戶可以根據(jù)需要自定義文檔類型定義。XML文檔通常使用DOCTYPE聲明指定文檔類型,例如:
<!DOCTYPE note SYSTEM "note.dtd">
其中,note.dtd是自定義的文檔類型定義文件。
HTML和XML的標(biāo)記名稱也有所不同。
HTML標(biāo)記通常是有語(yǔ)義含義的,例如<p>表示段落,<h1>表示一級(jí)標(biāo)題,而XML標(biāo)記的名稱則通常是根據(jù)數(shù)據(jù)的結(jié)構(gòu)和屬性命名的,例如<customer>表示一個(gè)客戶數(shù)據(jù),<order>表示一個(gè)訂單數(shù)據(jù)。
HTML和XML的標(biāo)記屬性也有所不同。
HTML標(biāo)記通常具有一些預(yù)定義的屬性,例如<img>標(biāo)記具有src、alt、width、height等屬性。這些屬性有一定的語(yǔ)義含義,例如src表示圖像的URL地址,alt表示圖像的替代文本等。
XML標(biāo)記的屬性則由用戶定義,用戶可以根據(jù)需要定義任意數(shù)量和名稱的屬性。XML標(biāo)記的屬性沒有預(yù)定義的語(yǔ)義含義,用戶可以根據(jù)需要定義屬性的
語(yǔ)義。
HTML和XML在應(yīng)用場(chǎng)景上也有所不同。
HTML主要用于構(gòu)建Web頁(yè)面,可以使用HTML語(yǔ)言來定義網(wǎng)頁(yè)的結(jié)構(gòu)、樣式和功能。HTML通過標(biāo)記來描述網(wǎng)頁(yè)元素,如標(biāo)題、段落、鏈接、圖片、表格等,同時(shí)也支持一些交互性的功能,如表單、腳本等。HTML網(wǎng)頁(yè)通常在Web瀏覽器中顯示,用戶可以通過Web瀏覽器來訪問和使用。
XML主要用于描述數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)內(nèi)容,可以用于描述任何類型的數(shù)據(jù),如文本、圖像、音頻、視頻等。XML通過標(biāo)記來描述數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)屬性,如數(shù)據(jù)元素、數(shù)據(jù)屬性、數(shù)據(jù)類型等。XML可以用于在不同的系統(tǒng)和平臺(tái)之間傳遞數(shù)據(jù),也可以用于數(shù)據(jù)存儲(chǔ)和數(shù)據(jù)交換。XML還可以用于定義和描述Web服務(wù),如SOAP和RESTful API。
HTML和XML都是標(biāo)記語(yǔ)言,但其語(yǔ)法、標(biāo)記、應(yīng)用場(chǎng)景等方面都有所不同。HTML是一種超文本標(biāo)記語(yǔ)言,其標(biāo)記具有預(yù)定義的語(yǔ)義含義,主要用于構(gòu)建Web頁(yè)面;XML是一種可擴(kuò)展標(biāo)記語(yǔ)言,其標(biāo)記沒有預(yù)定義的語(yǔ)義含義,主要用于描述數(shù)據(jù)結(jié)構(gòu)和內(nèi)容,以及定義Web服務(wù)。在實(shí)際應(yīng)用中,開發(fā)者需要根據(jù)實(shí)際需求選擇使用HTML或XML,并根據(jù)標(biāo)準(zhǔn)規(guī)范編寫符合語(yǔ)法和標(biāo)記要求的文檔。
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。