欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript處理XML DOM、XPath和XSLT方法詳解

 更新時(shí)間:2022年05月31日 09:49:37   作者:springsnow  
這篇文章介紹了JavaScript處理XML DOM、XPath和XSLT的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

一、瀏覽器對(duì)XML DOM的支持

1、將XML解析為DOM文檔

跨瀏覽器把XML解析為DOM文檔:

這個(gè) parseXml()函數(shù)只接收一個(gè)參數(shù),即可解析的 XML 字符串。

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;
}

2、將DOM文檔序列化為XML文檔

跨瀏覽器將DOM文檔序列化為XML文檔:

這個(gè) serializeXml()函數(shù)接收一個(gè)參數(shù),即要序列化的 XML DOM 文檔。

function serializeXml(xmldom) {

    if (typeof XMLSerializer != "undefined") {
        return (new XMLSerializer()).serializeToString(xmldom);
    } else if (typeof xmldom.xml != "undefined") {
        return xmldom.xml;
    } else {
        throw new Error("Could not serialize XML DOM.");
    }
}

二、瀏覽器對(duì)XPath的支持

跨瀏覽器使用XPath:重新創(chuàng)建 selectSingleNode()和selectNodes()方法。

命名空間對(duì)象應(yīng)該是下面這種字面量的形式。

{
    prefix1: "uri1",
    prefix2: "uri2",
    prefix3: "uri3"
}

selectSingleNode和selectNodes函數(shù)接收三個(gè)參數(shù):上下文節(jié)點(diǎn)、 XPath表達(dá)式和可選的命名空間對(duì)象。

selectSingleNode:

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") {
        //create namespace string
        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.");
    }
}
//調(diào)用
var result = selectSingleNode(xmldom.documentElement, "wrox:book/wrox:author", { wrox: <a  rel="external nofollow"  rel="external nofollow"   target="_blank">http://www.wrox.com/</a>});
alert(serializeXml(result));

selectNodes:

function selectNodes(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.ORDERED_NODE_SNAPSHOT_TYPE, null);
        var nodes = new Array();

        if (result !== null) {
            for (var i = 0,
            len = result.snapshotLength; i < len; i++) {
                nodes.push(result.snapshotItem(i));
            }
        }

        return nodes;
    } else if (typeof context.selectNodes != "undefined") {

        //create namespace string
        if (namespaces instanceof Object) {
            var ns = "";
            for (var prefix in namespaces) {
                if (namespaces.hasOwnProperty(prefix)) {
                    ns += "xmlns:" + prefix + "='" + namespaces[prefix] + "' ";
                }
            }
            doc.setProperty("SelectionNamespaces", ns);
        }
        var result = context.selectNodes(expression);
        var nodes = new Array();

        for (var i = 0,
        len = result.length; i < len; i++) {
            nodes.push(result[i]);
        }

        return nodes;
    } else {
        throw new Error("No XPath engine found.");
    }
}
//調(diào)用
var result = selectNodes(xmldom.documentElement, "wrox:book/wrox:author", {wrox: <a  rel="external nofollow"  rel="external nofollow"   target="_blank">http://www.wrox.com/</a>});
alert(result.length);

三、瀏覽器對(duì)使用XSLT的支持

跨瀏覽器使用XSLT樣式表轉(zhuǎn)換XML文檔

這個(gè) transform()函數(shù)接收兩個(gè)參數(shù):要執(zhí)行轉(zhuǎn)換的上下文節(jié)點(diǎn)和 XSLT 文檔對(duì)象。

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.");
    }
}

到此這篇關(guān)于JavaScript處理XML DOM、XPath和XSLT的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • uniapp實(shí)現(xiàn)可以左右滑動(dòng)導(dǎo)航欄

    uniapp實(shí)現(xiàn)可以左右滑動(dòng)導(dǎo)航欄

    這篇文章主要為大家詳細(xì)介紹了uniapp 實(shí)現(xiàn)可以左右滑動(dòng)導(dǎo)航欄,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-10-10
  • JS+CSS實(shí)現(xiàn)模仿瀏覽器網(wǎng)頁(yè)字符查找功能的方法

    JS+CSS實(shí)現(xiàn)模仿瀏覽器網(wǎng)頁(yè)字符查找功能的方法

    這篇文章主要介紹了JS+CSS實(shí)現(xiàn)模仿瀏覽器網(wǎng)頁(yè)字符查找功能的方法,實(shí)例分析了javascript實(shí)現(xiàn)查找功能的樣式及相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-02-02
  • JS+CSS模擬可以無(wú)刷新顯示內(nèi)容的留言板實(shí)例

    JS+CSS模擬可以無(wú)刷新顯示內(nèi)容的留言板實(shí)例

    這篇文章主要介紹了JS+CSS模擬可以無(wú)刷新顯示內(nèi)容的留言板,涉及javascript操作dom元素、鼠標(biāo)事件及css樣式的技巧,需要的朋友可以參考下
    2015-03-03
  • 學(xué)習(xí)JavaScript設(shè)計(jì)模式之單例模式

    學(xué)習(xí)JavaScript設(shè)計(jì)模式之單例模式

    這篇文章主要為大家介紹了JavaScript設(shè)計(jì)模式中的單例模式,對(duì)JavaScript設(shè)計(jì)模式感興趣的小伙伴們可以參考一下
    2016-01-01
  • 可編輯下拉框的2種實(shí)現(xiàn)方式

    可編輯下拉框的2種實(shí)現(xiàn)方式

    下拉框想必大家都有見(jiàn)過(guò),可編輯的下拉框就不多見(jiàn)了吧,本例為大家介紹個(gè)不錯(cuò)的實(shí)現(xiàn)方法,需要的朋友可以參考下
    2014-06-06
  • JavaScript實(shí)現(xiàn)打地鼠游戲

    JavaScript實(shí)現(xiàn)打地鼠游戲

    這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)打地鼠游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • 在Node.js中使用Javascript Generators詳解

    在Node.js中使用Javascript Generators詳解

    下面小編就為大家?guī)?lái)一篇在Node.js中使用Javascript Generators詳解。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考
    2016-05-05
  • javascript常用經(jīng)典算法詳解

    javascript常用經(jīng)典算法詳解

    本文主要介紹了javascript七種常見(jiàn)算法:冒泡排序;插入排序;希爾排序;歸并排序;快速排序;選擇排序;奇偶排序。具有一定的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-01-01
  • 一些實(shí)用性較高的js方法

    一些實(shí)用性較高的js方法

    這篇文章主要為大家分享了一些實(shí)用性較高的js方法,方便大家開(kāi)發(fā)時(shí)使用,感興趣的小伙伴們可以參考一下
    2016-04-04
  • javascript之通用簡(jiǎn)單的table選項(xiàng)卡實(shí)現(xiàn)(二)

    javascript之通用簡(jiǎn)單的table選項(xiàng)卡實(shí)現(xiàn)(二)

    上篇中的選項(xiàng)卡存在這樣的問(wèn)題:把邏輯封裝在table.js中,不夠靈活,也就是說(shuō)如果某個(gè)選項(xiàng)卡是實(shí)現(xiàn)異步請(qǐng)求或者跳轉(zhuǎn),而非div的顯隱切換,那么就得修過(guò)table.js來(lái)達(dá)到目的,顯然不是我所需要的。
    2010-05-05

最新評(píng)論