【问题标题】:How to convert string to xml object in jquery如何在jquery中将字符串转换为xml对象
【发布时间】:2011-09-24 00:54:49
【问题描述】:

我查看了Convert String to XML Document in JavaScript,但在我的情况下找不到解决方案,有人可以在我的情况下帮助我吗?

我有一个像下面这样的字符串,我想把它转换成一个 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>');
    }           
  }
});

我稍后在代码'&lt;div class="block"&gt;'+htmlTable+'&lt;/div&gt;'中添加htmlTable

我根本不提醒

【问题讨论】:

  • 我可以知道你为什么要将字符串转换为 xml 的原因
  • @nitinJS: 我想解析一下是否severity=="warning"左右以及其他检查
  • Convert String to XML Document in JavaScript 的可能重复项 - 只需提取字符串,转换 并将其转储到 jQuery 对象中
  • @Vivek: 我希望&amp;lt;&amp;gt; 分别转换为&lt;&gt;,这样它就变成了xml 对象,我可以解析它
  • as you written它只提示280, 280`,那根据你应该提示什么呢?

标签: javascript jquery


【解决方案1】:

使用jQuery.parseXML,解析你的xml

【讨论】:

  • 我试过这个$.parseXML( xml ) 可能我可以用各自的&amp;lt;&amp;gt; 替换所有&amp;lt;&amp;gt; 然后它可能会工作
【解决方案2】:

虽然它可能与 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>');

更新这更正确:

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>

【讨论】:

  • 你的 jsfiddle 链接是什么?
  • @mplungjan:谢谢,我也碰巧找到了替代解决方案,这是我的link 看看
  • @Abhishek:请查看更新。在我看来更一致的 html 处理完成处理
  • @mplungjan:我试过了,但它没有产生结果..你能看看我更新的问题吗?谢谢
  • 为什么不使用我的方法?看代码,我从实体字符串中抓取了newXml。您必须首先转换外部 XML,然后转换内部 XML
猜你喜欢
  • 2013-06-20
  • 2010-10-13
  • 1970-01-01
  • 2011-03-04
  • 2012-07-11
  • 2011-03-12
  • 1970-01-01
  • 2011-06-23
相关资源
最近更新 更多