Lors de l'utilisation de XPath pour interroger/évaluer un document XML généré par DOMParser de JSDOM, la partie attribut de la requête semble être forcée en minuscules, ce qui rend impossible la recherche d'attributs contenant des caractères majuscules.
Par exemple, étant donné le document suivant :
<?xml version="1.0" encoding="utf-8"?><example Foo="bar"></example>
^-- capital F
Une requête pour //*[@Foo="bar"]
(ou //*[@foo="bar"]
d'ailleurs) ne renvoie aucune correspondance, mais étant donné ce document à la place avec des attributs en minuscule :
<?xml version="1.0" encoding="utf-8"?><example foo="bar"></example>
^-- lower case F
Maintenant, avec ce nouveau document, //*[@foo="bar"]
( et l'équivalent en majuscule //*[@Foo="bar"]
) réussissent à trouver la correspondance.
J'ai trouvé un problème similaire il y a longtemps (https://github.com/jsdom/jsdom/issues/651) qui a été résolu en introduisant Saxes pour analyser les documents XML séparément des documents HTML, mais actuellement au niveau de l'analyse tout semble être correctement analysé (par exemple, les attributs conservent leur casse). C'est au niveau de l'évaluation XPath que la requête semble être en minuscule.
J'ai essayé de réduire l'endroit où l'erreur pourrait se produire et j'ai atteint https://github.com/jsdom/jsdom/blob/b83783da63deeb7c5602b024a92e214df423a412/lib/jsdom/level3/xpath.js#L1659
La définition de cette shouldLowerCase
sur false
corrige mon cas d'utilisation, mais je ne suis pas au courant des implications que cela a pour le reste de l'implémentation XPath.
const { JSDOM } = require("jsdom");
const dom = new JSDOM();
const domParser = new dom.window.DOMParser();
const doc = domParser.parseFromString('<?xml version="1.0" encoding="utf-8"?><example Foo="bar"></example>', 'text/xml');
const result = doc.evaluate('//*[@Foo="bar"]', doc, null, XPathResult.ANY_TYPE, null);
const exampleNode = result.iterateNext();
console.log('Result:', exampleNode); // exampleNode is null
https://jsbin.com/qegifaqumi/2/edit?js , console
La requête XPath est sensible à la casse et peut correspondre à des nœuds avec des attributs avec des caractères majuscules.
Nous avons eu du mal à remplacer notre ancienne implémentation xpath à la main par une implémentation tierce maintenue. C'est probablement le meilleur moyen de résoudre ce problème, bien qu'un PR de correction ponctuelle avec un test soit également acceptable.
Salut, des mises à jour ?
Commentaire le plus utile
https://mobile.twitter.com/slicknet/status/782274190451671040