Jquery突然停止解析xml

问题描述:

对于某些浏览器,对于某些客户端,jquery突然停止解析xml。

For some browsers, for some clients, jquery suddenly stopped parsing xml.

示例xml:

<?xml version="1.0" encoding="UTF-8"?>
<wfs:FeatureCollection xmlns:wfs="http://www.opengis.net/wfs" xmlns="http://www.opengis.net/wfs" xmlns:gml="http://www.opengis.net/gml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:example_namespace="https://mylink.com/wfs/example_namespace" xsi:schemaLocation="https://mylink.com/wfs/example_namespace mylink.com?SERVICE=WFS&amp;VERSION=1.0.0&amp;TYPENAME=example_namespace:TABLE&amp;REQUEST=DescribeFeatureType" numberMatched="unknown" numberReturned="1">
<gml:featureMember>
<example_namespace:TABLE fid="TABLE.15">
<example_namespace:ID>15</example_namespace:ID>
</example_namespace:TABLE>
</gml:featureMember>
</wfs:FeatureCollection>

示例jquery

$.get(link, function(data) { //Response is xml like in example.
console.log(data) //works as before
console.log($(data).find("featureMember").find("ID").text())
//Doesn't work now for some clients, but worked before.
})

编辑:

更多一般示例:

XML

<?xml version="1.0" encoding="UTF-8"?>
<a xmlns:c="http://www.example.com">
<c:b>TEST</c:b>
</a>

AND JS:

console.log($(data).find("b").text())

现在返回:,返回前:TEST

now returns: "", before returns: "TEST"

编辑2:

类似的问题:
无法使用jQuery提取SOAP XML


此代码最初在Chrome上周使用,一旦Chrome
更新为v60,它就不再使用了。

This code was originally working in Chrome last week and once Chrome updated to v60 it no longer does.


以这种方式使用jQuery解析XML有一些浏览器兼容性错误我相信。这是一个 不会修复jquery bug 以前。

Parsing XML using jQuery in this way has some browser compatibility bugs I believe. This has been a won't fix jquery bug previously.

当xml中有名称空间时,您可以使用 jquery 通过转义冒号来选择以下内容:

When there are namespaces in the xml you can use jquery selectors like the below by escaping the colon:

.find('gml\\:featureMember')

或使用 nodeName

.find('[nodeName="gml:featureMember"]')

参见下面的演示:

var xml=`<?xml version="1.0" encoding="UTF-8"?><wfs:FeatureCollection xmlns:wfs="http://www.opengis.net/wfs" xmlns="http://www.opengis.net/wfs" xmlns:gml="http://www.opengis.net/gml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:example_namespace="https://mylink.com/wfs/example_namespace" xsi:schemaLocation="https://mylink.com/wfs/example_namespace mylink.com?SERVICE=WFS&amp;VERSION=1.0.0&amp;TYPENAME=example_namespace:TABLE&amp;REQUEST=DescribeFeatureType" numberMatched="unknown" numberReturned="1"><gml:featureMember><example_namespace:TABLE fid="TABLE.15"><example_namespace:ID>15</example_namespace:ID></example_namespace:TABLE></gml:featureMember></wfs:FeatureCollection>`;

console.log($(xml)
  .find('gml\\:featureMember')
  .find("example_namespace\\:ID").text());

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>