2011-06-28 28 views
2

我看着Convert String to XML Document in JavaScript,但我找不到解决方案,我的情况是否有人可以帮助我。如何将字符串转换为jquery中的xml对象

我有一个像下面的字符串,我想将它转换为一个XML对象,我该怎么做?

<list> 
<Response> 
<cfgId>280</cfgId> 
<recommendations>&lt;Rule&gt; 
&lt;name&gt;simple rule&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; Current value of maxfilesperproc is 32 
increase it to 1024&lt;/actionResult&gt; 
&lt;/Rule&gt;</recommendations> 
</Response> 
</list> 

上面的XML

<list> 

<Response> 
<cfgId>280</cfgId> 

<recommendations> 
<Rule> <name>simple rule</name> <category>none</category> <severity>warning</severity>  <ruleEvalResult>true</ruleEvalResult> <actionResult>Current value of maxfilesperproc is 32 
increase it to 1024</actionResult> </Rule> 

</recommendations> 

</Response> 
</list> 

更新,这里的可读的版本是我试过。

var xml; 
$.post("/csm/rules.action", 
    { sessiontoken: sessiontoken, 
    cfgid:   cfgid}, 
     function(xmldata) 
     { 

      xml=$(xmldata); 


     } 
); 
var htmlTable = $('<table></table>'); 

$(xml).find('Response').each(function(){ 
    var cid = $(this).find('cfgId').text(); 
    alert(cid+", "+cfgid); 
    if(cid==cfgid) { 

    // Now grab the entitiy string 
    var newXmlString = $(xml).find('recommendations').text(); 
    // Convert the entities to HTML and return a jQuery object 
    var newXml = $("<div/>").html(newXmlString); 

    // NOW we can get at the inner XML 
    var ruleseverity=$(newXml).find('severity').text(); 
    if(ruleseverity=="warning") { 
     var rulename=$(newXml).find('name').text(); 
     var rulecategory=$(newXml).find('category').text(); 
     var ruleresult=$(newXml).find('ruleEvalResult').text(); 
     var ruleactionresult=$(newXml).find('actionResult').text(); 
     htmlTable.append('<tr><td>RuleName:'+rulename+'</td><td>RuleResult: '+ruleactionresult+'</td></tr>'); 
    }   
    } 
}); 

我加入htmlTable代码'<div class="block">'+htmlTable+'</div>'

后,我完全不

+0

我可以知道为什么ü要的原因将字符串转换为xml –

+0

@nitinJS:我想分析它,看看是否“严重==”警告“'等左右和其他检查 – abi1964

+0

我没有得到你的问题? – Vivek

回答

4

虽然可能重复 Convert String to XML Document in JavaScript - 我们可以使用jquery decode html entities

我做了一个fiddle

// the $() creates a jQuery object of the outer XML 
var xml = $('<list><Response><cfgId>280</cfgId><recommendations>&lt;Rule&gt;&lt;name&gt;simple rule&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; Current value of maxfilesperproc is 32 increase it to 1024&lt;/actionResult&gt;&lt;/Rule&gt;</recommendations></Response></list>'); 

UPDATE这是比较正确的:

http://jsfiddle.net/mplungjan/ppj3nquL/

var xmlString = '<list><Response><cfgId>280</cfgId><recommendations>&lt;Rule&gt;&lt;name&gt;simple rule&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; Current value of maxfilesperproc is 32 increase it to 1024&lt;/actionResult&gt;&lt;/Rule&gt;</recommendations></Response></list>'; 
 
var xmlDocument = $.parseXML(xmlString); 
 
var $xml = $(xmlDocument); 
 

 

 
var cfgid = 280; 
 
var htmlTable = $('<table></table>'); 
 

 
$xml.find('Response').each(function() { 
 
    var cid = $(this).find('cfgId').text(); 
 
    if (cid == cfgid) { 
 
    // Now grab the entitiy string 
 
    var newXmlString = $(this).find('recommendations').text(); 
 
    // Convert the entities to HTML and return a jQuery object 
 
    var newXml = $("<div/>").html(newXmlString); 
 

 
    // NOW we can get at the inner XML 
 
    var ruleseverity = $(newXml).find('severity').text(); 
 
    if (ruleseverity == "warning") { 
 
     var rulename = $(newXml).find('name').text(); 
 
     var rulecategory = $(newXml).find('category').text(); 
 
     var ruleresult = $(newXml).find('ruleEvalResult').text(); 
 
     var ruleactionresult = $(newXml).find('actionResult').text(); 
 
     htmlTable.append('<tr><td>RuleName:' + rulename + '</td><td>RuleResult: ' + ruleactionresult + '</td></tr>'); 
 
    } 
 
    } 
 
}); 
 
$("#container").append(htmlTable);
td { 
 
    border: 1px solid black 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="container"></div>

+0

什么是你的链接的jsfiddle? – abi1964

+0

@Abhishek:请参阅更新 – mplungjan

+0

@mplungjan:谢谢我也碰巧找到一个替代解决方案,这里是我的[链接](http://jsfiddle.net/rPLCR/1/)看一看 – abi1964

2

使用jQuery.parseXML警示,分析XML

+0

我试过这个'$ .parseXML(xml)'可能是我可以用各自的'<' and '>'替换所有的'<'和'>',然后它可能会工作 – abi1964