js处理xml工具(针对js同化大小写的问题)

涉及到js处理xml字符串的业务,查遍网上方法都没有合适的工具。

没办法自己写了一个,应对比较特殊的业务需求

前端渣,大神勿吐槽,临时凑合用,实现了几个需要用到的方法,自留笔记用。

const sofunXml=function (ElementName) {
    this.ElementName=ElementName;
    this.xmlStr="<"+ElementName+"></"+ElementName+">";
    sofunXml.prototype.attr=function (field,value) {
        let domInfo=this.xmlStr.substring(this.ElementName.length+1,this.xmlStr.indexOf(">"));

        let infoArray=domInfo.split(" ");
        let infoArr=[];

        for(let i in infoArray){
            if(infoArray[i].length>0){
                infoArr.push(infoArray[i])
            }
        }

        if(value!=undefined){ //注入值还是获取值
            if(infoArr.length>0 && infoArr[0].length>0){
                for(let i in infoArr){
                    let fieldArr=infoArr[i].split("=");
                    if(field==fieldArr[0]){
                        let bf=this.xmlStr.substring(0,this.xmlStr.indexOf(field)+field.length);
                        let af=this.xmlStr.substring(bf.length,this.xmlStr.length);
                        af=af.substring(af.indexOf(" "),af.length);
                        this.xmlStr=bf+"=\""+value+"\" "+af;

                        this.xmlStr=format(this.xmlStr);
                        return; //替换后结束本次操作
                    }
                }

                //没有找到已存在的属性就注入新的属性
                let bf=this.xmlStr.substring(0,this.xmlStr.indexOf(">"));
                let af=this.xmlStr.substring(this.xmlStr.indexOf(">"),this.xmlStr.length);
                this.xmlStr=bf+" "+field+"=\""+value+"\" "+af;


            }else{
                this.xmlStr =this.xmlStr.substring(0,this.xmlStr.indexOf(">"))+" "+field+"=\""+value+"\" "
                    +this.xmlStr.substring(this.xmlStr.indexOf(">"),this.xmlStr.length)
            }

            this.xmlStr=format(this.xmlStr)
        }else{ //获取值暂时用不上

        }
    };


    /**
     * 节点内部结尾追加
     * @param sfXml
     */
    sofunXml.prototype.append=function (sfXml) {
        let bf=this.xmlStr.substring(0,this.xmlStr.lastIndexOf("<"));
        let af=this.xmlStr.substring(this.xmlStr.lastIndexOf("<"),this.xmlStr.length);
        if(typeof sfXml =="string"){
            this.xmlStr=bf+sfXml+af;
        }else{
            this.xmlStr=bf+sfXml.xmlStr+af;
        }

    };

    /**
     * 节点内开头追加
     * @param sfXml
     */
    sofunXml.prototype.prepend=function (sfXml) {
        let bf=this.xmlStr.substring(0,this.xmlStr.indexOf(">")+1);
        let af=this.xmlStr.substring(this.xmlStr.indexOf(">")+1,this.xmlStr.length)
        if(typeof sfXml =="string"){
            this.xmlStr=bf+sfXml+af;
        }else{
            this.xmlStr=bf+sfXml.xmlStr+af;
        }

    };
    sofunXml.prototype.clone=function () {
        let res=new sofunXml();
        res.ElementName=this.ElementName;
        res.xmlStr=this.xmlStr;
        return res;
    };

    //去除多余空格
    function format(str) {
         let reStr=str.replace(/\s\s+/g," ");
        return reStr
    }
    return this;
}

测试方法:

let process=new sofunXml("process");

process.attr("name","省级传阅");
        
process.attr("name","省级传阅111");

let test=new sofunXml("test");
test.attr("id","test");

let test1=test.clone();
test1.attr("id","test1");

process.append(test);
process.append(test1);

console.log(process)

console.log("xml字符串:"+process.xmlStr)

时间紧急,有点bug,不能像jq那样针对某个对象随时修改属性,但是不影响使用,介意的仁兄可以改改,有更好的方法一定记得告诉我!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值