3

好的,我会尽量简单地解释这一点;

我正在尝试使用 jQuery 解析通过 Web 服务获得的 XML。一切都在按应有的方式进行,直到我注意到看在上帝的份上,我无法解析名为“图像”的节点。长话短说(2 小时后)我注意到,问题出在标签名上。显然,“图像”是保留字或类似的东西???

这是一个演示;首先,我模拟了具有“图像”节点且不会显示任何结果的 xml。其次,我模拟了相同的 xml,相同的解析,我只是将“image”重命名为“image1”,它可以工作。请参阅此处的示例:http: //jsbin.com/evinah/1/edit

所以,显然我无法更改网络服务,它不在我的域中。如何使用 jQuery 获取“图像”值?

感谢您的回复。

4

3 回答 3

3

其他答案中已经提到了如何解决这个问题,但我认为解释image标签的“错误”是很重要的。

当您将 XML 字符串传递给 jQuery 时,它将使用浏览器的原生 DOM 方法来解析 XML。这些 DOM 方法主要用于解析和处理 HTML。

让我们看看创建root元素时会发生什么:

> var e = document.createElement('root');
  <root></root>

console.log(e)列出了一堆属性,但最重要的是,这个元素继承自HTMLUnknownElement,这是有道理的。

现在让我们创建一个image元素:

> var e = document.createElement('image');
  <img>

呃?在哪里<image></image>?原来那imageimg. 新元素继承自HTMLImageElement.

您现在可能认为您可以这样做.children('img').text(),但这不起作用,因为img元素不能有后代。浏览器生成的结果结构是:

<root>
    <item>
        <img>
        image link
    </item>
    <item>
        <img>
        image link2
    </item>
</root>

文本节点是img元素的兄弟姐妹,而不是后代。

于 2013-02-10T14:21:39.910 回答
2

$函数不用于解析 XML。您必须使用$.parseXML,然后将其包装在一个 jQuery 对象中:$($.parseXML(...)). 其实对于 HTML 也有专门的功能$.parseHTML。使用字符串调用的$函数应该与选择器或简单"<tag>"字符串一起使用。

于 2013-02-10T13:56:48.703 回答
2

如果你正在处理一个字符串,你应该使用$.parseXML它,这将返回一个可以与 jQuery 一起使用的有效的 XML 文档。

$($.parseXML(xml)).find('item').each(function(i, e){
  alert($(e).children('image').text());
});

(看这里。)

如果您使用的是 AJAX,那么您应该将dataType选项设置为xml.


$(xml)部分工作而不使用$.parseXMLexcept 的主要原因<image>,是因为在 DOM 构建过程中<image>元素被转译为元素。<img>最重要的是,<img>是一个空元素,不会包含任何破坏 XML 结构的子文本元素。

有关历史用法的更多信息,<img><image>参阅 HTML 中的<img>vs<image>标签

于 2013-02-10T13:57:42.523 回答