- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
编辑:我在这里漏掉了两件事。 AJAX 调用返回的 header 中缺少“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);
});
});
这是我得到的输出:
<?xml version="1.0" encoding="UTF-8"?><response>
<projects>
<project>
<ixProject>2</ixProject>
<sProject><![CDATA[Inbox]]></sProject>
<ixPersonOwner>2</ixPersonOwner>
<sPersonOwner><![CDATA[Rich]]></sPersonOwner>
<sEmail><![CDATA[rich@example.com]]></sEmail>
<sPhone></sPhone>
<fInbox>true</fInbox>
<ixGroup>1</ixGroup>
<iType>1</iType>
<sGroup><![CDATA[Internal]]></sGroup>
</project>
<project>
<ixProject>1</ixProject>
<sProject><![CDATA[Sample Project]]></sProject>
<ixPersonOwner>2</ixPersonOwner>
<sPersonOwner><![CDATA[Rich]]></sPersonOwner>
<sEmail><![CDATA[rich@example.com]]></sEmail>
<sPhone></sPhone>
<fInbox>false</fInbox>
<ixGroup>1</ixGroup>
<iType>1</iType>
<sGroup><![CDATA[Internal]]></sGroup>
</project>
</projects>
</response>
<ixproject>2</ixproject>
<sproject></sproject>
<ixpersonowner>2</ixpersonowner>
<spersonowner></spersonowner>
<semail></semail>
<sphone></sphone>
<finbox>true</finbox>
<ixgroup>1</ixgroup>
<itype>1</itype>
<sgroup></sgroup>
<ixproject>1</ixproject>
<sproject></sproject>
<ixpersonowner>2</ixpersonowner>
<spersonowner></spersonowner>
<semail></semail>
<sphone></sphone>
<finbox>false</finbox>
<ixgroup>1</ixgroup>
<itype>1</itype>
<sgroup></sgroup>
看起来,JQuery 原生的 XML 解析会丢弃 CDATA 元素的内容。 FogBugz 将我们的大部分字符串数据放在 CDATA 标签中,因为我们在大多数地方都允许使用特殊字符和标点符号。将输出包含在 CDATA 标记中可以让我们相对放心,我们正在通过我们的 API 发回有效数据。 XML 的 PHP 解析工作得很好。我的在线研究发现一些人对此表示提示,但完成的工作并不多。凭借 JQuery 的可扩展性,我会认为那里有一些东西。还有其他人做到了吗?
最佳答案
It would seem that the XML parsing that's native to JQuery
jQuery 没有原生的 XML 解析。它只是使用标准的 XMLHttpRequest.responseXML 属性来获取响应的 XML DOM。
discards the contents of CDATA elements
您发送响应的 Content-Type 是什么?因为我怀疑它根本没有被解析为 XML。在这种情况下,jQuery 将向您传回一个文档字符串,而不是 XML DOM。
然后当您调用“$(xml)”时,它将根据该字符串创建文档内容(*) —⟩解析为 HTML,不是 XML。在 HTML 中没有 CDATA 部分这样的东西,因此浏览器可能会丢弃它们,或者将它们视为注释。
我怀疑这是因为当文档是 XML 时“project.html()”实际上不应该工作。 “html()”仅返回与标准“innerHTML”属性(**)相同的值,它仅适用于 HTML 文档;它在 XML 元素上未定义。
Enclosing the output in CDATA tags allows us to rest relatively assured that we're sending back valid data via our API.
好吧,“相对”:如果您的数据恰好包含“]]>”,您仍然会输。 <![CDATA[ sections 旨在作为提高手工创作可写性的拐杖;机器生成的 XML 实际上应该以正常方式使用实体编码。通常服务器应用程序应该使用适当的 XML 工具来生成响应,在这种情况下,这将自动完成。
(*:我从来不明白什么时候 jQuery 觉得需要将文档片段创建和 CSS 选择压缩到同一个函数中。它们是完全不同的操作,您不想混淆,就像这里可能发生的那样。 )
(**:实际上,它首先尝试使用正则表达式过滤掉 jQuery 自定义属性。不幸的是,由于正则表达式无法解析 HTML,它会很乐意地过滤掉文本中恰好看起来像 HTML 属性的有效部分。哎呀。不是 jQuery 更漂亮的部分之一。)
关于jquery - 使用 JQuery 使用 CDATA 解析 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/652159/
在带有 jQuery 的 CoffeeScript 中,以下语句有什么区别吗? jQuery ($) -> jQuery -> $ - > 最佳答案 第一个与其他两个不同,就像在纯 JavaScr
已关闭。这个问题是 off-topic 。目前不接受答案。 想要改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 已关闭13 年前。 Improve th
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
这个问题可能听起来很愚蠢,但请耐心等待,因为我完全是初学者。我下载了两个 jQuery 版本,开发版本和生产版本。我想知道作为学习 jQuery 的初学者,什么更适合我。 最佳答案 如果您对 jQue
The documentation说要使用 1.6.4,但我们现在已经升级到 1.7.2。 我可以在 jQuery Mobile 中使用最新版本的 jQuery 吗? 最佳答案 您当然可以,但如果您想
我在这里看到这个不错的 jquery 插件:prettyphoto jquery lightbox有没有办法只用一个简单的jquery来实现这样的效果。 我只需要弹出和内联内容。你的回复有很大帮助。
很明显我正在尝试做一些 jQuery 不喜欢的事情。 我正在使用 javascript 上传图片。每次上传图片时,我都希望它可见,并附加一个有效的删除脚本。显示工作正常,删除则不然,因为当我用 fir
这两个哪个是正确的? jQuery('someclass').click(function() { alert("I've been clicked!"); }); 或 jQuery('somec
我正在寻找一个具有以下格式的插件 if (jQuery)(function ($) { -- plugin code -- })(jQuery); 我明白 (function ($)
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭10 年前。 Improv
我知道这个问题已经被问过几次了,但想知道您是否可以帮助我解决这个问题。 背景:我尝试创建一个使用 Ajax 提交的表单(jQuery 表单提交)。我已经工作得很好,然后我想在表单上得到验证。我可以使用
我正在使用无处不在的jquery validate plugin用于表单验证。它支持使用metadata plugin用于向表单元素添加验证规则。 我正在使用此功能。当验证查找这些规则时,它会对元素进
我更喜欢为我一直在开发的网络社区添加实用的视觉效果,但随着事情开始堆积,我担心加载时间。 拥有用户真的更快吗加载(希望是缓存的)副本来自 Google 存储库的 jquery? 是否使用 jQuery
这个问题已经有答案了: Slide right to left? (17 个回答) 已关闭 9 年前。 你能告诉我有没有办法在 jQuery 中左右滑动而不使用 jQuery UI 和 jQuery
我如何找出最适合某种情况的方法?任何人都可以提供一些示例来了解功能和性能方面的差异吗? 最佳答案 XMLHttpRequest 是原始浏览器对象,jQuery 将其包装成一种更有用和简化的形式以及跨浏
运行时 php bin/console oro:assets:build ,我有 11 个这样的错误: ERROR in ../node_modules/jquery-form/src/jquery.
我试图找到 jQuery.ajax() 在源代码中的定义位置。但是,使用 grep 似乎不起作用。 在哪里? 谢谢。 > grep jQuery.ajax src/* src/ajax.js:// B
$.fn.sortByDepth = function() { var ar = []; var result = $([]); $(this).each(function()
我的页面上有多个图像。为了检测损坏的图像,我使用了在 SO 上找到的这个。 $('.imgRot').one('error',function(){ $(this).attr('src','b
我在理解 $ 符号作为 jQuery 函数的别名时遇到了一些麻烦,尤其是在插件中。你能解释一下 jQuery 如何实现这种别名:它如何定义 '$' 作为 jQuery 函数的别名?这是第一个问题。 其
我是一名优秀的程序员,十分优秀!