如何替换<和和gt;来自客户端的XML响应

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

本文关键字:gt 客户端 响应 XML 和和 替换 何替换      更新时间:2023-09-26

我有一个来自服务器端的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>

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

替换
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);

但是显示空白,请帮我取severity

更新我的答案

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;
}

您过早地将返回的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);
    }
});

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

试一下

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);

希望能有所帮助

下一个例子可以帮助你:

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>"

更新:下一段代码不需要替换&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/