• js操作XML文件兼容IE与FireFox


    最近项目中用到了xml,需求是用户安装产品时先把一系列的数据保存到xml文件中,当执行到最后一步时才写入数据库,这样最大限度的减少了数据库的访问,于是不得不纠结在各浏览器的妇道兼容性的问题(悲哀啊....)

    进入正文 下面是一个xml文件 (createInstal.xml)

    <?xml version="1.0" encoding="utf-8"?>
    <info>
    <Item>
    <id descrption="级别" name="1" f_chines="编号" t_chines="編號" english="id" value="1">编号</id>
    <levelname descrption="级别" name="" f_chines="级别名称" t_chines="級別名稱" english="Level-Name" value="级别一">级别名称</levelname>
    <decrption descrption="级别" name="" f_chines="级别描述" t_chines="級別描述" english="Level-Description" value="级别描述一">描述</decrption>
    <Tchines descrption="级别" name="" f_chines="繁体中文" t_chines="繁體中文" english="T-Chinese" value="級別一">繁体中文</Tchines>
    <english descrption="级别" name="" f_chines="英文名称" t_chines="英文名稱" english="English" value="LevelOne">英文名称</english>
    <奖项六 descrption="奖项" name="106" f_chines="奖项六" t_chines="獎項六" english="Worda-of-t" value="a"/>
    <奖项十一 descrption="奖项" name="111" f_chines="奖项十一" t_chines="獎項十一" english="11" value="0.05"/>
    <奖项十二 descrption="奖项" name="112" f_chines="奖项十二" t_chines="獎項十二" english="2222" value="0.04"/>
    <奖项十三 descrption="奖项" name="113" f_chines="奖项十三" t_chines="獎項十三" english="3333" value="0.85"/>
    <奖项一 descrption="奖项" name="101" f_chines="奖项一" t_chines="獎項一" english="Aword-of-a" value="0.90"/>
    </Item>
    </info>

    为了能兼容IE与FF,写如下几个函数(loadxml.js):

    var is_Ie =false; //是否为IE浏览器
    if (window.ActiveXObject) {
    is_Ie
    =true;
    }
    //加载多浏览器兼容的xml文档
    function loadXml(xmlUrl) {
    var xmldoc =null;
    try {
    xmldoc
    =new ActiveXObject("Microsoft.XMLDOM");
    }
    catch (e) {
    try {
    xmldoc
    = document.implementation.createDocument("", "", null);
    }
    catch (e) {
    alert(e.message);
    }
    }
    try {
    //关闭异步加载
    xmldoc.async =false;
    xmldoc.load(xmlUrl);
    return xmldoc;
    }
    catch (e) {
    alert(e.message);
    }
    returnnull;
    }
    //将一个xml文档格式的字符串换成xml文档
    function createXml(xmlText) {
    if (!xmlText) {
    returnnull;
    try {
    var xmldocm =new ActiveXObject("Microsoft.XMLDOM");
    xmldocm.loadXML(xmlText);
    return xmldocm;
    }
    catch (e) {
    try {
    returnnew DOMParse().parseFromString(xmlText, "text/xml");
    }
    catch (e) {
    returnnull;
    }
    }
    }
    }
    //获取节点及其子节点的文本
    function getXmlText(oNode) {
    if (oNode.text) {//IE
    return oNode.tex;
    }
    var sText ="";
    for (var i =0; i < oNode.childNodes.length; i++) { //遍历子节点
    if (oNode.childNodes[i].hasChildNodes()) { //是否有子节点
    sText += getXmlText(oNode.childNodes[i]);
    }
    else {
    sText
    += oNode[i].childNodes.nodeValue;
    }
    }
    return sText;
    }

    //获取节点及其子节点的字符串标识
    function getXml(oNode) {
    if (oNode.xml) {//IE
    return oNode.xml;
    }
    var serializer =new XMLSerializer();
    return serializer.serializeToString(oNode);

    }
    //获取指定节点的文本
    function getxmlnodeText(oNode) {
    if (is_Ie) {
    return oNode.text;
    }
    else {
    if (oNode.nodeType ==1)
    return oNode.textContent;
    }
    }
    //获取指定节点的属性值
    function getxmlnodeattribute(oNode, attrName) {
    if (is_Ie) {
    return oNode.getAttribute(attrName);
    }
    else {
    if (oNode.nodeType ==1|| oNode.nodeType =="1")
    return oNode.attributes[attrName].value;
    return"undefined";
    }
    }

    ok  IE与FF 不再是问题,具体的操作方法如下:

    var docum = loadxml("createInstal.xml");//加载一个xml文件

    var root = docum.documentElement;//根节点

    var nodelist = root.getElementsByTagName("Items");

    for(var i=0;i<nodelist[0].childNodes.length;i++)

    {

      var attr = getxmlnodeattribute(nodeList[0].childNodes[i], "descrption");//获取这个节点的descrption属性

      if(attr != "undefined")//目的是兼容FF浏览器

      {

        alert(attr);

      }

    }

    这样就能保证IE与FF的兼容,(目前谷歌浏览器没有办法用这种方法兼容,还待修改)

  • 相关阅读:
    检测.netcore环境是否安装
    vc获取特殊路径
    vc 获取系统版本
    vs2019集成vcpkg
    vc 打开外部线程并等待结束
    cmd常用命令
    nodejs mongodb3.6.2 insertOne callback问题
    Effective Python Ver2.0_StudyNotes___getattr__、__getattribute__及__setattr__的一些知识点
    Python数据类型--集合简介
    Effective Python Ver2.0_StudyNotes_用描述符来改写需要复用的@property方法
  • 原文地址:https://www.cnblogs.com/youshan/p/2025476.html
Copyright © 2020-2023  润新知