Pour certains navigateurs, pour certains clients, jquery a soudainement cessé d'analyser xml.
Exemple 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&VERSION=1.0.0&TYPENAME=example_namespace:TABLE&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>
Exemple 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. })
MODIFIER:
Exemple plus général:
XML
<?xml version="1.0" encoding="UTF-8"?> <a xmlns:c="http://www.example.com"> <c:b>TEST</c:b> </a>
ET JS:
console.log($(data).find("b").text())
Retourne maintenant: "", avant les retours: "TEST"
EDIT 2:
Problème similaire: Impossible d'extraire SOAP XML avec jQuery
Ce code fonctionnait à l'origine dans Chrome la semaine dernière et une fois que Chrome était mis à jour pour v60, il ne le fait plus.
Passez les data
à $.parseXML()
pour obtenir un #document
, utilisez .querySelector()
$.parseXML(data).querySelector("featureMember").querySelector("ID").textContent;
En conséquence, passez le résultat de $.parseXML()
à jQuery()
et utilisez .find()
$($.parseXML(data)).find("featureMember").find("ID").text();
Jsfiddle https://jsfiddle.net/5fuLquth/
Par exemple, l'analyse de XML à l'aide de jQuery comporte des bugs de compatibilité avec le navigateur que je crois. Cela a été une won't fix jquery bug
précédemment.
Lorsqu'il existe des namespaces
de namespaces
dans le xml, vous pouvez utiliser les sélecteurs jquery
comme ci-dessous en échappant aux deux points:
.find('gml\\:featureMember')
Ou utilisant nodeName
:
.find('[nodeName="gml:featureMember"]')
Voir démo ci-dessous:
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&VERSION=1.0.0&TYPENAME=example_namespace:TABLE&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>