当前位置:  开发笔记 > 前端 > 正文

使用JQuery解析XML与CDATA

如何解决《使用JQuery解析XML与CDATA》经验,为你挑选了2个好方法。

编辑:我在这里错过了两件事.AJAX调用返回的标头中缺少"Content-Type:text/xml",这阻止了JQuery将返回的数据视为文档.一旦正确处理,此代码正确解析并仅输出索引和项目名称.

$("a.getprojects").click(function(d){
  d.preventDefault();
  var api_token = $("#token").val();
  var form_fbod = $("#fbod").val();
  $.post("fbinfo.php", {fbod: form_fbod, token: api_token, cmd : 'listProjects', extra:''}, function(returned_xml) {
    var output = '';
    $(returned_xml).find("project").each(function(){
      var project = $(this);
      output += project.find("ixProject").text();
      output += " ";
      output += project.find("sProject").text();
      output += "\n";
    });
    $("#output").val(output);
  });
});

原文:我很高兴使用FogBugz API和JQuery来组合我认为将是一个很酷的小工具,但我遇到了JQuery限制.CDATA标签似乎混淆了它.

这是我正在使用的代码:

  $("a.getprojects").click(function(d){
    d.preventDefault();
    var api_token = $("#token").val();
    var form_fbod = $("#fbod").val();
    $.post("fbinfo.php", {fbod: form_fbod, token: api_token, cmd : 'listProjects', extra:''}, function(xml) {
      var output = xml;
      $(xml).find("project").each(function(){
        var project = $(this);
        output += "\n\n";

        output += project.html();

      });
      $("#output").val(output);

    });
  });

这是我得到的输出:


    

2

2



true
1
1




1

2



false
1
1





2

2



true
1
1


1

2



false
1
1

似乎JQuery原生的XML解析会丢弃CDATA元素的内容.FogBugz将我们的大部分字符串数据放在CDATA标签中,因为我们在大多数地方允许使用特殊字符和标点符号.将输出封装在CDATA标签中可以让我们相对放心,我们通过API发回有效数据.PHP的PHP解析工作得很好.我的在线研究让一些人抱怨这个,但没有多少工作要做.有了JQuery的可扩展性,我认为那里有一些东西.有没有其他人完成这个?



1> bobince..:

似乎是JQuery原生的XML解析

jQuery没有原生的XML解析.它只使用标准的XMLHttpRequest.responseXML属性来获取响应的XML DOM.

丢弃CDATA元素的内容

你发送回复的内容类型是什么?因为我怀疑它根本没有被解析为XML.在这种情况下,jQuery将向您传回一个文档字符串,而不是XML DOM.

然后当你调用"$(xml)"时,它将从该字符串(*)创建文档内容 - 解析为HTML,而不是 XML.在HTML中没有CDATA部分,因此浏览器可能会丢弃它们,或将它们视为注释.

我怀疑这是因为当文档是XML时,"project.html()"实际上不起作用.'html()'只返回与标准'innerHTML'属性(**)相同的内容,它只适用于HTML文档; 它在XML元素上是未定义的.

将输出封装在CDATA标签中可以让我们相对放心,我们通过API发回有效数据.

好吧,'相对':如果你的数据恰好包含"]]>"你仍然输了.

(*:我从未理解jQuery何时感觉需要将文档片段创建和CSS选择压缩到同一个函数中.它们是完全不同的操作,您不希望混淆,这可能发生在这里.)

(**:实际上,它试图首先使用正则表达式过滤掉jQuery自定义属性.不幸的是,由于正则表达式无法解析HTML,因此它很乐意过滤掉恰好看起来像HTML属性的文本的有效部分.哎呀. jQuery更漂亮的部分.)



2> CharlesTWall..:

事实上,jquery确实有一个xml解析器,可以解决你的问题.$ .parseXML(xml) http://api.jquery.com/jQuery.parseXML/

推荐阅读
云聪京初瑞子_617
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有