javascript 如何替换 < 和 > 来自客户端的 xml 响应

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/7593441/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-26 00:37:53  来源:igfitidea点击:

How to replace &lt; and &gt; from the xml response in client side

javascriptjquery

提问by AabinGunz

I have a response that comes from server side in xml format (partial like below)

我有一个来自服务器端的 xml 格式的响应(部分如下)

<list>
    <Response>
        <cfgId>903</cfgId>
        <recommendations>
            &lt;Rule&gt;
            &lt;name&gt;Env SSA_RB_RESTART&lt;/name&gt;
            &lt;category&gt;none&lt;/category&gt;
            &lt;severity&gt;warning&lt;/severity&gt;
            &lt;ruleEvalResult&gt;true&lt;/ruleEvalResult&gt;
            &lt;actionResult&gt;Setting SSA_RB_RESTART=0 will cause RuleBase corruption.Kindly unset this environment variable and
            restart the IIR server&lt;/actionResult&gt;
            &lt;/Rule&gt;
        </recommendations>
    </Response>
    <Response>
        <cfgId>903</cfgId>
        <recommendations>
            &lt;Rule&gt;
            &lt;name&gt;SSAOPTS (+Ltd) setting&lt;/name&gt;
            &lt;category&gt;none&lt;/category&gt;
            &lt;severity&gt;warning&lt;/severity&gt;
            &lt;ruleEvalResult&gt;true&lt;/ruleEvalResult&gt;
            &lt;actionResult&gt;
            Please note that it is not recommended to have SSAOPTS=+Ltd in case of the 
            Production environment.&lt;/actionResult&gt;
            &lt;/Rule&gt;
        </recommendations>
    </Response>
</list>

update

更新

I get the main Responsetag with xml=$(xmldata); var resp_x = $(xml).find('Response').text();and then I am trying to replace with below

我得到了主Response标签,xml=$(xmldata); var resp_x = $(xml).find('Response').text();然后我试图用下面的替换

resp_x = resp_x.replace(/&lt;/g,"<");
resp_x = resp_x.replace(/&gt;/g,">");
var rule_x = $(resp_x).find('name').text();
alert(rule_x);

but it gives me blank, please help me fetch severity.

但它给了我空白,请帮我取severity

UPDATE with my answer

更新我的答案

var xmlString=xmlToString(xmldata);
                xmlString=xmlString.replace(/(&lt;)/g,"<").replace(/(&gt;)/g,">");

                xml=StringtoXML(xmlString);

 //now I can do my operations here
 $(xml).find('Response').each(function(){
   console.debug($(this).find('severity').text());
 });


function xmlToString(xmlObj) {
if (navigator.appName == "Netscape")
{
   return (new XMLSerializer()).serializeToString(xmlObj);
}
if (navigator.appName == "Microsoft Internet Explorer")
{
    return xmlObj.xml;
}
}

function StringtoXML(text){
if (window.ActiveXObject){
  var doc=new ActiveXObject('Microsoft.XMLDOM');
  doc.async='false';
  doc.loadXML(text);
} else {
  var parser=new DOMParser();
  var doc=parser.parseFromString(text,'text/xml');
}
return doc;
}

回答by Asbj?rn Ulsberg

You're converting the returned XML to a jQuery object too early and then doing the replace wrong. Try something like this:

您过早地将返回的 XML 转换为 jQuery 对象,然后进行了错误的替换。尝试这样的事情:

$.ajax({
    url: 'list.xml',
    dataType: 'text',
    success: function(data) {
        console.debug(data);

        data = data.replace('&lt;', '<', 'gm')
                   .replace('&gt;', '>', 'gm');

        console.debug(data);

        var $severities = $(data).find('severity');

        console.debug($severities);
    }
});

In the replace(), you need both the g(global) and m(multi-line) flags. See the documentation on String.replace()for details.

在 中replace(),您需要g(全局)和m(多行)标志。有关详细信息,请参阅有关String.replace()的文档。

回答by AmGates

Try like this

像这样尝试

resp_x = resp_x.replace(/(&lt;)/g,"<");
                resp_x = resp_x.replace(/(&gt;)/g,">");
                var rule_x=$(resp_x).find('name').text();
                alert(rule_x);

Hope this helps

希望这可以帮助

回答by Andrew D.

Next example can help you:

下一个示例可以帮助您:

var str="&lt;Rule&gt;&lt;name&gt;Env SSA_RB_RESTART&lt;/name&gt;&lt;category&gt;none&lt;/category&gt;&lt;severity&gt;warning&lt;/severity&gt;&lt;ruleEvalResult&gt;true&lt;/ruleEvalResult&gt;&lt;actionResult&gt;Setting SSA_RB_RESTART=0 will cause RuleBase corruption.Kindly unset this environment variable and restart the IIR server&lt;/actionResult&gt;"

str=str.replace(/&lt;|&gt;/g,function(s){return s==="&lt;"?"<":">"});
// str now is: "<Rule><name>Env SSA_RB_RESTART</name><category>none</category><severity>warning</severity><ruleEvalResult>true</ruleEvalResult><actionResult>Setting SSA_RB_RESTART=0 will cause RuleBase corruption.Kindly unset this environment variable and restart the IIR server</actionResult>"

Update:next code does not need to replace &lt;and &gt;for getting severity:

更新:下一个代码不需要替换&lt;&gt;获取severity

var response="<list><Response><cfgId>903</cfgId><recommendations>&lt;Rule&gt;&lt;name&gt;Env SSA_RB_RESTART&lt;/name&gt;&lt;category&gt;none&lt;/category&gt;&lt;severity&gt;warning&lt;/severity&gt;&lt;ruleEvalResult&gt;true&lt;/ruleEvalResult&gt;&lt;actionResult&gt;Setting SSA_RB_RESTART=0 will cause RuleBase corruption.Kindly unset this environment variable and restart the IIR server&lt;/actionResult&gt; &lt;/Rule&gt;</recommendations></Response><Response><cfgId>903</cfgId><recommendations>&lt;Rule&gt;&lt;name&gt;SSAOPTS (+Ltd) setting&lt;/name&gt;&lt;category&gt;none&lt;/category&gt;&lt;severity&gt;warning&lt;/severity&gt;&lt;ruleEvalResult&gt;true&lt;/ruleEvalResult&gt;&lt;actionResult&gt; Please note that it is not recommended to have SSAOPTS=+Ltd in case of the  Production environment.&lt;/actionResult&gt;&lt;/Rule&gt;</recommendations></Response></list>";

var recs=$(response).find("recommendations");

for(var i=0;i<recs.length;i++) {
  var xml=$("<recommendations>"+$(recs[i]).text()+"</recommendations>");
  alert(xml.find("severity").text());
}

http://jsfiddle.net/ZpYac/

http://jsfiddle.net/ZpYac/