如何在 netsuite 中使用 suitescript 提取 XML 值 @attribute?

How can I extract XML value @attribute with suitescript in netsuite?

<?xml version="1.0" encoding="ISO-8859-9"?>
<?xml-stylesheet type="text/xsl" href="isokur.xsl"?>
<Tarih_Date Tarih="02.07.2015" Date="07/02/2015" Bulten_No="2015/127">
<Currency CrossOrder="0" Kod="USD" CurrencyCode="USD"><Unit>1</Unit><Isim>ABD DOLARI</Isim><CurrencyName>US DOLLAR</CurrencyName></Currency>

你好 如何使用 suitescript 从这个 xml 中提取 CurrencyCode="USD" 属性?

Restlet 中没有这样的 XML 解析器来获得您想要的结果。但是,如果您不一定要使用 Restlet,那么我建议您使用 SuiteTalk。使用 SuiteTalk,您将可以奢侈地使用任何 XML 解析器。您可以轻松解析 XML 文件并获得结果。

但是如果您没有使用 SuiteTalk 的奢侈,那么一种解决方案可能是将您的 XML 字符串转换为 JSON 并获取值。

这是将 XML 转换为 JSON 的代码:

xml2json={
    parser:function(xmlcode,ignoretags,debug){
        if(!ignoretags){ignoretags=""};
        xmlcode=xmlcode.replace(/\s*\/>/g,'/>');
        xmlcode=xmlcode.replace(/<\?[^>]*>/g,"").replace(/<\![^>]*>/g,"");
        if (!ignoretags.sort){ignoretags=ignoretags.split(",")};
        var x=this.no_fast_endings(xmlcode);
        x=this.attris_to_tags(x);
        x=escape(x);
        x=x.split("%3C").join("<").split("%3E").join(">").split("%3D").join("=").split("%22").join("\"");
        for (var i=0;i<ignoretags.length;i++){
            x=x.replace(new RegExp("<"+ignoretags[i]+">","g"),"*$**"+ignoretags[i]+"**$*");
            x=x.replace(new RegExp("</"+ignoretags[i]+">","g"),"*$***"+ignoretags[i]+"**$*")
        };
        x='<JSONTAGWRAPPER>'+x+'</JSONTAGWRAPPER>';
        this.xmlobject={};
        var y=this.xml_to_object(x).jsontagwrapper;
        if(debug){y=this.show_json_structure(y,debug)};
        return y
    },
    xml_to_object:function(xmlcode){
        var x=xmlcode.replace(/<\//g,"§");
        x=x.split("<");
        var y=[];
        var level=0;
        var opentags=[];
        for (var i=1;i<x.length;i++){
            var tagname=x[i].split(">")[0];
            opentags.push(tagname);
            level++
            y.push(level+"<"+x[i].split("§")[0]);
            while(x[i].indexOf("§"+opentags[opentags.length-1]+">")>=0){level--;opentags.pop()}
        };
        var oldniva=-1;
        var objname="this.xmlobject";
        for (var i=0;i<y.length;i++){
            var preeval="";
            var niva=y[i].split("<")[0];
            var tagnamn=y[i].split("<")[1].split(">")[0];
            tagnamn=tagnamn.toLowerCase();
            var rest=y[i].split(">")[1];
            if(niva<=oldniva){
                var tabort=oldniva-niva+1;
                for (var j=0;j<tabort;j++){objname=objname.substring(0,objname.lastIndexOf("."))}
            };
            objname+="."+tagnamn;
            var pobject=objname.substring(0,objname.lastIndexOf("."));
            if (eval("typeof "+pobject) != "object"){preeval+=pobject+"={value:"+pobject+"};\n"};
            var objlast=objname.substring(objname.lastIndexOf(".")+1);
            var already=false;
            for (k in eval(pobject)){if(k==objlast){already=true}};
            var onlywhites=true;
            for(var s=0;s<rest.length;s+=3){
                if(rest.charAt(s)!="%"){onlywhites=false}
            };
            if (rest!="" && !onlywhites){
                if(rest/1!=rest){
                    rest="'"+rest.replace(/\'/g,"\'")+"'";
                    rest=rest.replace(/\*$\*\*\*/g,"</");
                    rest=rest.replace(/\*$\*\*/g,"<");
                    rest=rest.replace(/\*\*$\*/g,">")
                }
            } 
            else {rest="{}"};
            if(rest.charAt(0)=="'"){rest='unescape('+rest+')'};
            if (already && !eval(objname+".sort")){preeval+=objname+"=["+objname+"];\n"};
            var before="=";after="";
            if (already){before=".push(";after=")"};
            var toeval=preeval+objname+before+rest+after;
            eval(toeval);
            if(eval(objname+".sort")){objname+="["+eval(objname+".length-1")+"]"};
            oldniva=niva
        };
        return this.xmlobject
    },
    show_json_structure:function(obj,debug,l){
        var x='';
        if (obj.sort){x+="[\n"} else {x+="{\n"};
        for (var i in obj){
            if (!obj.sort){x+=i+":"};
            if (typeof obj[i] == "object"){
                x+=this.show_json_structure(obj[i],false,1)
            }
            else {
                if(typeof obj[i]=="function"){
                    var v=obj[i]+"";
                    //v=v.replace(/\t/g,"");
                    x+=v
                }
                else if(typeof obj[i]!="string"){x+=obj[i]+",\n"}
                else {x+="'"+obj[i].replace(/\'/g,"\'").replace(/\n/g,"\n").replace(/\t/g,"\t").replace(/\r/g,"\r")+"',\n"}
            }
        };
        if (obj.sort){x+="],\n"} else {x+="},\n"};
        if (!l){
            x=x.substring(0,x.lastIndexOf(","));
            x=x.replace(new RegExp(",\n}","g"),"\n}");
            x=x.replace(new RegExp(",\n]","g"),"\n]");
            var y=x.split("\n");x="";
            var lvl=0;
            for (var i=0;i<y.length;i++){
                if(y[i].indexOf("}")>=0 || y[i].indexOf("]")>=0){lvl--};
                tabs="";for(var j=0;j<lvl;j++){tabs+="\t"};
                x+=tabs+y[i]+"\n";
                if(y[i].indexOf("{")>=0 || y[i].indexOf("[")>=0){lvl++}
            };
            if(debug=="html"){
                x=x.replace(/</g,"&lt;").replace(/>/g,"&gt;");
                x=x.replace(/\n/g,"<BR>").replace(/\t/g,"&nbsp;&nbsp;&nbsp;&nbsp;")
            };
            if (debug=="compact"){x=x.replace(/\n/g,"").replace(/\t/g,"")}
        };
        return x
    },
    no_fast_endings:function(x){
        x=x.split("/>");
        for (var i=1;i<x.length;i++){
            var t=x[i-1].substring(x[i-1].lastIndexOf("<")+1).split(" ")[0];
            x[i]="></"+t+">"+x[i]
        }   ;
        x=x.join("");
        return x
    },
    attris_to_tags: function(x){
        var d=' ="\''.split("");
        x=x.split(">");
        for (var i=0;i<x.length;i++){
            var temp=x[i].split("<");
            for (var r=0;r<4;r++){temp[0]=temp[0].replace(new RegExp(d[r],"g"),"_jsonconvtemp"+r+"_")};
            if(temp[1]){
                temp[1]=temp[1].replace(/'/g,'"');
                temp[1]=temp[1].split('"');
                for (var j=1;j<temp[1].length;j+=2){
                    for (var r=0;r<4;r++){temp[1][j]=temp[1][j].replace(new RegExp(d[r],"g"),"_jsonconvtemp"+r+"_")}
                };
                temp[1]=temp[1].join('"')
            };
            x[i]=temp.join("<")
        };
        x=x.join(">");
        x=x.replace(/ ([^=]*)=([^ |>]*)/g,"><></");
        x=x.replace(/>"/g,">").replace(/"</g,"<");
        for (var r=0;r<4;r++){x=x.replace(new RegExp("_jsonconvtemp"+r+"_","g"),d[r])}  ;
        return x
    }
};


if(!Array.prototype.push){
    Array.prototype.push=function(x){
        this[this.length]=x;
        return true
    }
};

if (!Array.prototype.pop){
    Array.prototype.pop=function(){
        var response = this[this.length-1];
        this.length--;
        return response
    }
};

按如下方式解析您的 xml 字符串:

var myJsonObject=xml2json.parser('<?xml version="1.0" encoding="ISO-8859-9"?><?xml-stylesheet type="text/xsl" href="isokur.xsl"?><Tarih_Date Tarih="02.07.2015" Date="07/02/2015" Bulten_No="2015/127"><Currency CrossOrder="0" Kod="USD" CurrencyCode="USD"><Unit>1</Unit> <Isim>ABD DOLARI</Isim> <CurrencyName>US DOLLAR</CurrencyName>  </Currency></Tarih_Date>');

它将 return 你像这样:

然后你可以简单地通过

得到值
var currency_code = myJsonObject.tarih_date.currency.currencycode;

如果您可以获取字符串形式的 xml 值,那么您可以进行如下调用:

var xml = '<Currency CrossOrder="0" Kod="USD" CurrencyCode="USD"><Unit>1</Unit><Isim>ABD DOLARI</Isim><CurrencyName>US DOLLAR</CurrencyName></Currency>';
var asDoc = nlapiStringToXML(xml);
nlapiSelectValue(asDoc, 'Currency/@CurrencyCode');

使用 NS 帮助获取所有 nlapiSelectxxx 调用的完整文档。以上工作客户端。它也应该在服务器端工作。