摘要:中的它不是一種正式的規(guī)范,,是的另一表現(xiàn)形式。是第一個支持它的。主要的功能是用來將轉(zhuǎn)換為文檔。方法用于取得當(dāng)前參數(shù)的值,參數(shù)為命名空間和參數(shù)的內(nèi)部名稱。跨瀏覽器使用這個函數(shù)接收兩個參數(shù)要執(zhí)行轉(zhuǎn)換的上下文節(jié)點和文檔對象。
IE中的XSTL
它不是一種正式的規(guī)范,, 是XPath的另一表現(xiàn)形式。 IE是第一個支持它的。
簡單的XSTL轉(zhuǎn)換XML文檔的方式就是將它們分別加到一個DOM文檔中, 然后使用
transformNode()
方法。
這個方法接收一個參數(shù), 即包含XSTL樣式表的文檔。 調(diào)用這個方法之后會返回一個包含轉(zhuǎn)換信息的字符串。
xmldom.load("employees.xml"); xstldom.load("employees.xstl"); var result = xmldom.transformNodes(xstldom);
這個transformNode的參數(shù)可以是XML文檔的DOM節(jié)點。 如果不是在文檔元素上調(diào)用transformNode, 那么轉(zhuǎn)換就會從調(diào)用節(jié)點上開始。
復(fù)雜的XSLT轉(zhuǎn)換要使用復(fù)雜的XSTL轉(zhuǎn)換, 必須使用XSL模板和XSL處理器。 先要把XSTL樣式表加載到一個線程安全的XML文檔中。
function createThreadSafeDocument() { if (typeof arguments.callee.activeXString != "string") { var versions = ["MSXML2.FreeThreadedDOMDocument.6.0", "MSXML2.FreeThreadedDOMDocument.3.0", "MSXML2.FreeThreadedDOMDocument"], i, len; for (i = 0, len = versions.length; i < len; i++) { try { new ActiveXObject(versions[i]); arguments.callee.activeXString = versions[i]; break; } catch (ex) { //skip } } } return new ActiveXObject(arguments.callee.activeXString); }
創(chuàng)建XSTL模板:
function createXSTLTemplate() { if (typeof arguments.callee.activeXString != "string") { var versions = ["MSXML2.FreeThreadedDOMDocument.6.0", "MSXML2.FreeThreadedDOMDocument.3.0", "MSXML2.FreeThreadedDOMDocument"], i, len; for (i = 0, len = versions.length; i < len; i++) { try { new ActiveXObject(versions[i]); arguments.callee.activeXString = versions[i]; break; } catch (ex) { //skip } } } return new ActiveXObject(arguments.callee.activeXString); }
下面是使用示例:
var xsltdom = createThreadSafeDocument(); xstldom.async = false; xsltdom.load("employees.xslt"); var template = createXSTLTemplate(); template.stylesheet = xstldom; var processor = tempalte.createProcessor(); processor.input = xmldom; processor.transform(); var result = processor.output;
在創(chuàng)建了XSL處理器之后, 必須將要轉(zhuǎn)換的節(jié)點指定給input屬性。 這個值可以是一個文檔, 也可以是文檔的任何節(jié)點。 然后調(diào)用transform方法即可執(zhí)行轉(zhuǎn)換并將結(jié)果作為字符串保存在output屬性中。 這些代碼實現(xiàn)了transformNode相同的功能。 使用XSL處理器可以對轉(zhuǎn)換進(jìn)行更多的控制, 同時也支持更高級的XSTL特性。
要將樣式表中的參數(shù)進(jìn)行賦值處理, 可以使用addParaneter() 方法, 它接收兩個參數(shù): 要設(shè)置的參數(shù)名稱和要指定的值。
processor.input = xmldom.documentElement; processor.addParameter("message", "Hello wrold!"); processor.transform();
XSL處理器的另一個高級特性是能夠設(shè)置一種操作模式。 在XSTL中, 可以使用mode特性為模板定義一種模式在定義了模式之后, 如果沒有將 < xsl: apply - tempaltes > 與匹配的mode特性一起使用, 就不會運(yùn)行該模板。 如果在 < xsl: apply - tempaltes > 元素的模式設(shè)置為“ title - first”, 那么在javascript使用時就需要像下面這樣進(jìn)行設(shè)置:
processor.input = xmldom; processor.addParameter("message", "Hello wrold!"); processor.setStartMode("title-first"); processor.transform();
如果打算用一個XSTL樣式表進(jìn)行多次轉(zhuǎn)換, 可以在每次轉(zhuǎn)換之后調(diào)用reset() 方法重置處理器。
processor.reset();
因為處理器已經(jīng)編譯了XSTL樣式表, 與transformNode() 相比, 這樣的轉(zhuǎn)換速度會更快一些
XSLTProcessor類型Mozilla通過火狐創(chuàng)建新類型, 其他非IE瀏覽器借鑒了它, 也實現(xiàn)了這個類型。 主要的功能是用來將XSLT轉(zhuǎn)換為XML文檔。
第一步加載DOM文檔, 一個基于XML, 另一個基于XSLT。 然后創(chuàng)建一個新XSLTProceesor對象, 并使用importStylesheet() 方法為其指定一個XSLT。 示例:
var processor = new XSLTProcessor(); processor.importStylesheet(xsltdom);
最后一步是執(zhí)行轉(zhuǎn)換。 這一步有兩種不同的方式: 如果想返回一個完整的DOM文檔, 可以調(diào)用
transformToDocument();
如果想返回一個文檔片段, 可以使用
transformToFragment()。
transformToDocument() 的參數(shù)是一個XML DOM。 transformToFragment() 的參數(shù)有兩個, 第一個是XML DOM, 第二個是擁有該文檔片段的文檔。
setParameter() 方法可以用來設(shè)置XSLT的參數(shù), 該方法接收三個參數(shù): 命名空間URI, 參數(shù)的內(nèi)部名稱和要設(shè)置的值。 這個方法必須在進(jìn)行最后一步轉(zhuǎn)化之前調(diào)用。
getParameter() 方法用于取得當(dāng)前參數(shù)的值, 參數(shù)為命名空間URI和參數(shù)的內(nèi)部名稱。
removeParameter() 方法用于移除當(dāng)前參數(shù)的值, 參數(shù)為命名空間URI和參數(shù)的內(nèi)部名稱。
后面兩個方法并不常用, 提供他們只是為了方便。
重置處理器的方法是reset() 方法。
跨瀏覽器使用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 caontext.transformNode(xslt); } else { throw new Error("No XSLT processor available."); } }
這個函數(shù)接收兩個參數(shù): 要執(zhí)行轉(zhuǎn)換的上下文節(jié)點和XSLT文檔對象。 返回序列化之后的字符串。
var result = transform(xmldom, xsltdom);
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/110341.html
摘要:中的它不是一種正式的規(guī)范,,是的另一表現(xiàn)形式。是第一個支持它的。主要的功能是用來將轉(zhuǎn)換為文檔。方法用于取得當(dāng)前參數(shù)的值,參數(shù)為命名空間和參數(shù)的內(nèi)部名稱。跨瀏覽器使用這個函數(shù)接收兩個參數(shù)要執(zhí)行轉(zhuǎn)換的上下文節(jié)點和文檔對象。 IE中的XSTL 它不是一種正式的規(guī)范,, 是XPath的另一表現(xiàn)形式。 IE是第一個支持它的。 簡單的XSTL轉(zhuǎn)換 XML文檔的方式就是將它們分別加到一個DOM文檔中...
摘要:,源代碼爬取京東商品列表,以手機(jī)商品列表為例示例網(wǎng)址版本京東手機(jī)列表源代碼下載位置請看文章末尾的源。,抓取結(jié)果運(yùn)行上面的代碼,就會爬取京東手機(jī)品類頁面的所有手機(jī)型號價格等信息,并保存到本地文件京東手機(jī)列表中。 showImg(https://segmentfault.com/img/bVxXHW); 1,引言 在上一篇《python爬蟲實戰(zhàn):爬取Drupal論壇帖子列表》,爬取了一個用...
摘要:在基于使用命名空間的文檔求值時,需要使用對象。第四個參數(shù)的取值類型是下列常量之一,返回與表達(dá)式匹配的數(shù)據(jù)類型。,返回字符串值。這是最常用的結(jié)果類型。集合中節(jié)點的次序與它們在文檔中的次序一致。 JavaScript與XML 瀏覽器對XML DOM的支持 DOM2級核心 在通過JavaScript處理XML時,通常只使用參數(shù)root,因為這個參數(shù)指定的是XML DOM文檔元素的標(biāo)簽名 v...
摘要:,引言本文講解怎樣用和使用接口下載內(nèi)容提取器,這是一個示例程序。具體請參看內(nèi)容提取器的定義。用下載內(nèi)容提取器可以直接跳到第部分的內(nèi)容。 showImg(https://segmentfault.com/img/bVyszb); 1,引言 本文講解怎樣用Java和JavaScript使用 GooSeeker API 接口下載內(nèi)容提取器,這是一個示例程序。什么是內(nèi)容提取器?為什么用這種方式...
摘要:函數(shù)接收三個參數(shù)上下文節(jié)點表達(dá)式和可選的命名空間對象。命名空間對象應(yīng)該是下面這種字面量的形式。使用樣式表轉(zhuǎn)換文檔跨瀏覽器使用這個函數(shù)接收兩個參數(shù)要執(zhí)行轉(zhuǎn)換的上下文節(jié)點和文檔對象。 showImg(https://segmentfault.com/img/bVbvHVd?w=962&h=496); 本章主要講解了以下四個問題: 1、將XML解析為DOM文檔 跨瀏覽器把XML解析為DOM文...
閱讀 3257·2023-04-26 01:31
閱讀 1898·2023-04-25 22:08
閱讀 3444·2021-09-01 11:42
閱讀 2828·2019-08-30 12:58
閱讀 2170·2019-08-29 18:31
閱讀 2435·2019-08-29 17:18
閱讀 3068·2019-08-29 13:01
閱讀 2555·2019-08-28 18:22