我的编程空间,编程开发者的网络收藏夹
学习永远不晚

JavaScript处理XMLDOM、XPath和XSLT方法详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

JavaScript处理XMLDOM、XPath和XSLT方法详解

一、浏览器对XML DOM的支持

1、将XML解析为DOM文档

跨浏览器把XML解析为DOM文档:

这个 parseXml()函数只接收一个参数,即可解析的 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文档:

这个 serializeXml()函数接收一个参数,即要序列化的 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.");
    }
}

二、浏览器对XPath的支持

跨浏览器使用XPath:重新创建 selectSingleNode()和selectNodes()方法。

命名空间对象应该是下面这种字面量的形式。

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

selectSingleNode和selectNodes函数接收三个参数:上下文节点、 XPath表达式和可选的命名空间对象。

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.");
    }
}
//调用
var result = selectSingleNode(xmldom.documentElement, "wrox:book/wrox:author", { wrox: <a href="http://www.wrox.com/" 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.");
    }
}
//调用
var result = selectNodes(xmldom.documentElement, "wrox:book/wrox:author", {wrox: <a href="http://www.wrox.com/" rel="external nofollow"  rel="external nofollow"   target="_blank">http://www.wrox.com/</a>});
alert(result.length);

三、浏览器对使用XSLT的支持

跨浏览器使用XSLT样式表转换XML文档

这个 transform()函数接收两个参数:要执行转换的上下文节点和 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.");
    }
}

到此这篇关于JavaScript处理XML DOM、XPath和XSLT的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

JavaScript处理XMLDOM、XPath和XSLT方法详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Java中URL的处理方法详解

URL(Uniform Resource Locator)中文名为统一资源定位符,有时也被俗称为网页地址,表示为互联网上的资源,本文主要为大家介绍了Java是如何处理URL的,感兴趣的可以了解一下
2023-05-20

SpringBoot处理JSON数据方法详解

这篇文章主要介绍了SpringBoot整合Web开发中Json数据处理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2022-11-13

详解javascript reduce函数的原理和用法

reduce函数是Javascript中一个非常常用的函数,它可以大大简化我们对数组的操作。在这篇文章中,我们将详细讲解reduce函数的原理以及如何实现它。一、reduce函数的概念reduce函数是Javascript中一个非常重要的函数,它经常被用来处理数组。它的作用是通过指定的函数将数组中的所有元素汇总为一个值。reduce函数的语法如下: array.reduc
2023-05-14

JS中异常抛出和处理方法图文详解

JavaScript和其他语言一样,都拥有捕获异常的机制,下面这篇文章主要给大家介绍了关于JS中异常抛出和处理的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
2022-11-16

mysql8.0.19忘记密码处理方法详解

1在配置文件中添加skip-grant-tables后重启mysql,然后直接登录[root@tyjs09 ~]# cat /etc/my.cnf[mysqld]user=mysqlbasedir=/application/mysq
2022-07-12

PHP实现表单处理方法详解

本文章向大家介绍PHP表单处理,主要包括PHP表单处理使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下
2022-12-03

java金钱处理方法实例详解

java金钱处理方法实例详解在支付行业中,涉及到对金钱的处理比较多。比如分转化成元、费率计算、手续费计算等等。1.分转化成元/** * 单位换算:分->元 * * @param amount * 分
2023-05-31

JavaScript实现组件化和模块化方法详解

这篇文章主要介绍了JavaScript实现组件化和模块化方法,模块化主要是指一个JS文件就是一个模块,向外提供特定功能的程序,组件化的中心思想其实跟模块化是大同小异的,感兴趣想要详细了解可以参考下文
2023-05-20

编程热搜

目录