摘要:在基于使用命名空間的文檔求值時,需要使用對象。第四個參數(shù)的取值類型是下列常量之一,返回與表達(dá)式匹配的數(shù)據(jù)類型。,返回字符串值。這是最常用的結(jié)果類型。集合中節(jié)點的次序與它們在文檔中的次序一致。
JavaScript與XML 瀏覽器對XML DOM的支持 DOM2級核心
在通過JavaScript處理XML時,通常只使用參數(shù)root,因為這個參數(shù)指定的是XML DOM文檔元素的標(biāo)簽名
var xmldom = document.implementation.createDocument("", "root", null); alert(xmldom.documentElement.tagName); //"root" var child = xmldom.createElement("child"); xmldom.documentElement.appendChild(child);DOMParser類型
在解析XML之前,首先必須創(chuàng)建一個DOMParser的實例,然后再調(diào)用parseFromString()方法,這個方法接收兩個參數(shù),要解析的XML字符串和內(nèi)容類型,返回的值是一個Document的實例
var parser = new DOMParser(); var xmldom = parser.parseFromString("XMLSerialize類型", "text/xml"); alert(xmldom.documentElement.tagName); //"root" alert(xmldom.documentElement.firstChild.tagName); //"child" var anotherChild = xmldom.createElement("child"); xmldom.documentElement.appendChild(anotherChild); var children = xmldom.getElementsByTagName("child"); alert(children.length); //2
XMLSerialize類型提供了相反的功能,將DOM文檔序列化為XML字符串
要序列化DOM文檔,首先必須創(chuàng)建XMLSerializer的實例,然后將文檔傳入其serializeToString()方法
var serializer = new XMLSerializer(); var xml = serializer.serializeToString(xmldom); alert(xml);IE8及之前版本中的XML
6種不同的XML文檔版本可以供選擇
Microsoft.XmlDom,最初隨同IE發(fā)布,不建議使用
MSXML2.DOMDocument,為方便腳本處理而更新的版本,建議僅在特殊情況下作為后備版本使用
MSXML2.DOMDocument3.0,為了在JavaScript中使用,這是最低的建議版本
MSXML2.DOMDocument4.0,在通過腳本處理時并不可靠,使用這個版本可能導(dǎo)致安全警告
MSXML2.DOMDocument5.0,在通過腳本處理時并不可靠,使用這個版本可能導(dǎo)致安全警告
MSXML2.DOMDocument6.0,通過腳本能夠可靠處理的最新版本
如果解析過程中出錯,可以在parseError屬性中找到錯誤信息,這個屬性本身是一個包含多個屬性的對象,每個屬性都保存著有關(guān)解析錯誤的某一方面信息
errorCode,錯誤類型的數(shù)值編碼,在沒有發(fā)生錯誤時值為0
filePos,文件中導(dǎo)致錯誤發(fā)生的位置
line,發(fā)生錯誤的行
linepos,發(fā)生錯誤的行中的字符
reason,對錯誤的文本解釋
srcText,導(dǎo)致錯誤的代碼
url,導(dǎo)致錯誤的文件的URL
跨瀏覽器處理XML
對解析XML而言,下面函數(shù)可以在所有四種主要瀏覽器中使用
function parseXml(xml){ var xmldom = null; if (typeof DOMParser != "undefined"){ xmldom = (new DOMParser()).parseFromString(xml, "text/xml"); var errors = xmldom.getElementsByTagName("parsererror"); if (errors.length){ throw new Error("XML parsing error:" + errors[0].textContent); } } else if (typeof ActiveXObject != "undefined"){ xmldom = createDocument(); xmldom.loadXML(xml); if (xmldom.parseError != 0){ throw new Error("XML parsing error: " + xmldom.parseError.reason); } } else { throw new Error("No XML parser available."); } return xmldom; }瀏覽器對XPath的支持 DOM3級XPath
在DOM3級XPath規(guī)范定義的類型中,最重要的兩個類型是XPathEvaluator和XPathResult
XPathEvaluator用于在特定的上下文中對XPath表達(dá)式求值
createExpression(expression, nsresolver) :將 XPath 表達(dá)式及相應(yīng)的命名空間信息轉(zhuǎn)換成一個 XPathExpression ,這是查詢的編譯版。在多次使用同一個查詢時很有用。
createNSResolver(node) :根據(jù) node 的命名空間信息創(chuàng)建一個新的 XPathNSResolver 對象。在基于使用命名空間的 XML 文檔求值時,需要使用 XPathNSResolver 對象。
evaluate(expression, context, nsresolver, type, result) :在給定的上下文中,基于特定的命名空間信息來對 XPath 表達(dá)式求值。剩下的參數(shù)指定如何返回結(jié)果。
evaluate()是最常用的,這個方法接收5個參數(shù):XPath表達(dá)式、上下文節(jié)點、命名空間求解器、返回結(jié)果的類型和保存結(jié)果的XPathResult對象。
其中第三個參數(shù)只在XML代碼中使用了XML命名空間時有必要指定,如果XML代碼中沒有使用命名空間,這個參數(shù)應(yīng)該指定為null。第四個參數(shù)的取值類型是下列常量之一
XPathResult.ANY_TYPE,返回與 XPath 表達(dá)式匹配的數(shù)據(jù)類型。
XPathResult.NUMBER_TYPE,返回數(shù)值。
XPathResult.STRING_TYPE,返回字符串值。
XPathResult.BOOLEAN_TYPE,返回布爾值。
XPathResult.UNORDERED_NODE_ITERATOR_TYPE,返回匹配的節(jié)點集合,但集合中節(jié)點的次序不一定與它們在文檔中的次序一致。
XPathResult.ORDERED_NODE_ITERATOR_TYPE,返回匹配的節(jié)點集合,集合中節(jié)點的次序與它們在文檔中的次序一致。這是最常用的結(jié)果類型。
XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,返回節(jié)點集合的快照,由于是在文檔外部捕獲節(jié)點,因此對文檔的后續(xù)操作不會影響到這個節(jié)點集合。集合中節(jié)點的次序不一定與它們在文檔中的次序一致。
XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,返回節(jié)點集合的快照,由于是在文檔外部捕獲節(jié)點,因此對文檔的后續(xù)操作不會影響到這個節(jié)點集合。集合中節(jié)點的次序與它們在文檔中的次序一致。
XPathResult.ANY_UNORDERED_NODE_TYPE,返回匹配的節(jié)點集合,但集合中節(jié)點的次序不一定與它們在文檔中的次序一致。
XPathResult.FIRST_ORDERED_NODE_TYPE,返回只包含一個節(jié)點的節(jié)點集合,包含的這個節(jié)點就是文檔中第一個匹配的節(jié)點
IE中的XPathIE對XPath的支持是內(nèi)置在基于ActiveX的XML DOM文檔對象中的,沒有使用DOMParser返回的DOM對象,因此,為了在IE9以及之前的版本中使用XPath,必須使用基于ActiveX的實現(xiàn),這個接口在每個節(jié)點上額外定義了兩個方法:selectSingleNode()和selectNodes()
跨瀏覽器使用XPath在其他使用DOM3級XPath對象的瀏覽器中,重新創(chuàng)建selectSingleNode()和selectNodes()方法。第一個函數(shù)接收三個參數(shù):上下文節(jié)點、XPath表達(dá)式和可選的命名空間對象
命名空間對象應(yīng)該是下面這種字面量形式
{ prefix1:"uri1", prefix2:"uri2", prefix3:"uri3" }
selectSingleNode()函數(shù)的完整代碼
function selectSingleNode(context, expression, namespaces){ var doc = (context.nodeType != 9 ? context.ownerDocument : context); if (typeof doc.evaluate != "undefined"){ var nsresolver = null; if (namespaces instanceof Object){ nsresolver = function(prefix){ return namespaces[prefix]; }; } var result = doc.evaluate(expression, context, nsresolver, XPathResult.FIRST_ORDERED_NODE_TYPE, null); return (result !== null ? result.singleNodeValue : null); } else if (typeof context.selectSingleNode != "undefined"){ //創(chuàng)建命名空間字符串 if (namespaces instanceof Object){ var ns = ""; for (var prefix in namespaces){ if (namespaces.hasOwnProperty(prefix)){ ns += "xmlns:" + prefix + "="" + namespaces[prefix] + "" "; } } doc.setProperty("SelectionNamespaces", ns); } return context.selectSingleNode(expression); } else { throw new Error("No XPath engine found."); } }瀏覽器對XSLT的支持 IE中的XSLT
與IE對其他XML功能的支持一樣,它對XSLT的支持也是通過ActiveX對象實現(xiàn)的,IE9中通過DOMParser創(chuàng)建的ODM文檔不能使用XSLT
使用XSLT樣式表轉(zhuǎn)換XML文檔的最簡方式,就是將它們分別加到一個DOM文檔中,然后再使用transformNode()方法,這個方法存在于文檔的所有節(jié)點中,它接收一個參數(shù),即包含XSLT樣式表的文檔,調(diào)用transformNode()方法會返回一個包含轉(zhuǎn)換信息的字符串。
//加載 XML 和 XSLT(僅限于 IE) xmldom.load("employees.xml"); xsltdom.load("employees.xslt"); //轉(zhuǎn)換 var result = xmldom.transformNode(xsltdom);XSLTProcessor類型
XSLTProcessor也支持使用setParameter()來設(shè)置XSLT的參數(shù),這個方法接收三個參數(shù):命名空間URI、參數(shù)內(nèi)部名稱和要設(shè)置的值
命名空間URI都是null,而內(nèi)部名稱就是參數(shù)的名稱,另外,必須在調(diào)用transformToDocument()或transformToFragment()之前調(diào)用這個方法
var processor = new XSLTProcessor() processor.importStylesheet(xsltdom); processor.setParameter(null, "message", "Hello World! "); var result = processor.transformToDocument(xmldom);
還有兩個與參數(shù)相關(guān)的方法,getParameter()和removeParameter(),分別用于取得和移除當(dāng)前參數(shù)的值,這兩個方法都要接受命名空間參數(shù)和參數(shù)的內(nèi)部名稱
var processor = new XSLTProcessor() processor.importStylesheet(xsltdom); processor.setParameter(null, "message", "Hello World! "); alert(processor.getParameter(null, "message")); //輸出"Hello World!" processor.removeParameter(null, "message"); var result = processor.transformToDocument(xmldom);
重置處理器時要調(diào)用reset()方法,這個方法會從處理器中移除所有參數(shù)和樣式,然后就可以再次調(diào)用importStyleSheet(),以加載不同的XSLT樣式表
var processor = new XSLTProcessor() processor.importStylesheet(xsltdom); //執(zhí)行轉(zhuǎn)換 processor.reset(); processor.importStylesheet(xsltdom2); //再執(zhí)行轉(zhuǎn)換跨瀏覽器使用XSLT
function transform(context, xslt){ if (typeof XSLTProcessor != "undefined"){ var processor = new XSLTProcessor(); processor.importStylesheet(xslt); var result = processor.transformToDocument(context); return (new XMLSerializer()).serializeToString(result); } else if (typeof context.transformNode != "undefined") { return context.transformNode(xslt); } else { throw new Error("No XSLT processor available."); } }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/97997.html
摘要:簡介簡史誕生于年,當(dāng)時主要負(fù)責(zé)表單的輸入驗證。實現(xiàn)一個完整的由三部分組成核心文檔對象模型瀏覽器對象模型就是對實現(xiàn)該標(biāo)準(zhǔn)規(guī)定的各個方面內(nèi)容的語言的描述。把整個頁面映射為一個多層節(jié)點結(jié)構(gòu)。由萬維網(wǎng)聯(lián)盟規(guī)劃。主要目標(biāo)是映射文檔的結(jié)構(gòu)。 JavaScript簡介 JavaScript簡史 JavaScript誕生于1995年,當(dāng)時主要負(fù)責(zé)表單的輸入驗證。 如果沒有表單驗證的功能,填入信息之...
摘要:在不給這個方法傳遞參數(shù)的情況下,它會返回所有后代節(jié)點與使用相同,而傳遞一個名稱作為參數(shù)則可以限制結(jié)果。,表示解析器應(yīng)該忽略標(biāo)記中的處理指令。數(shù)據(jù)序列化相關(guān)的設(shè)置,表示在序列化時,每次縮進(jìn)的空格數(shù)量。 E4X E4X的類型 E4X定義了幾個新的全局類型 XML,XML結(jié)構(gòu)中的任何一個獨立的部分 XMLList,XML對象的集合 Namespace,命名空間前綴與命名空間URI之間的映...
摘要:類型對象是的一個實例,表示整個頁面,而且,對象是對象的一個屬性,因此可以將其作為全局對象來訪問。刪除指定位置的行。創(chuàng)建創(chuàng)建創(chuàng)建第一行創(chuàng)建第二行將表格添加到文檔主體中 DOM 節(jié)點層次 Node類型 DOM1級定義了一個Node接口,該接口將由DOM中的所有節(jié)點類型實現(xiàn) 節(jié)點類型由在Node類型中定義的12個數(shù)值常量來表示,任何節(jié)點類型必居其一 Node.ELEMENT_NODE(...
摘要:如果不需要偽元素信息,第二個參數(shù)可以輸操作樣式表類型表示的是樣式表,包括通過元素包含的樣式表和在元素中定義的樣式表表示樣式表是否被禁用的布爾值。包括元素的高度可見的水平滾動條的高度上邊框高度和下邊框高度。顯示處理指令節(jié)點。 DOM2和DOM3 DOM變化 針對XML命名空間的變化 有了XML命名空間,不同XML文檔的元素就可以混合在一起,共同構(gòu)成格式良好的文檔,而不必?fù)?dān)心發(fā)生命名沖突...
摘要:語法語法可以表示三種類型的值簡單值使用與相同的語法,可以在中表示字符串?dāng)?shù)值布爾值和。對象對象作為一種復(fù)雜數(shù)據(jù)類型,表示的是一組無序的鍵值對兒。如果字符串長度超過了個,結(jié)果中將只出現(xiàn)前個字符。 JSON 語法 JSON語法可以表示三種類型的值 簡單值:使用與 JavaScript 相同的語法,可以在 JSON 中表示字符串、數(shù)值、布爾值和 null 。但 JSON 不支持 JavaS...
閱讀 1432·2021-11-25 09:43
閱讀 2029·2021-07-26 23:38
閱讀 741·2019-08-30 15:53
閱讀 2280·2019-08-30 15:43
閱讀 1168·2019-08-29 18:40
閱讀 1970·2019-08-26 13:28
閱讀 1975·2019-08-23 18:20
閱讀 543·2019-08-23 15:07