Saat menggunakan XPath untuk membuat kueri/mengevaluasi dokumen XML yang dihasilkan oleh DOMParser JSDOM, bagian atribut kueri tampaknya dipaksa menjadi huruf kecil, sehingga mustahil untuk meminta atribut yang berisi karakter huruf besar.
Misalnya, diberikan dokumen berikut:
<?xml version="1.0" encoding="utf-8"?><example Foo="bar"></example>
^-- capital F
Kueri untuk //*[@Foo="bar"]
(atau //*[@foo="bar"]
dalam hal ini) tidak menghasilkan kecocokan, namun mengingat dokumen ini sebagai gantinya dengan atribut huruf kecil:
<?xml version="1.0" encoding="utf-8"?><example foo="bar"></example>
^-- lower case F
Sekarang dengan dokumen baru ini, //*[@foo="bar"]
( dan setara dengan huruf besar //*[@Foo="bar"]
) berhasil menemukan kecocokan.
Saya telah menemukan masalah serupa sejak lama (https://github.com/jsdom/jsdom/issues/651) yang diperbaiki dengan memperkenalkan Saxes untuk mengurai dokumen XML secara terpisah dari dokumen HTML, namun saat ini di tingkat penguraian semuanya tampaknya diurai dengan benar (misalnya atribut mempertahankan kasusnya). Pada tingkat evaluasi XPath itulah kueri tampaknya menggunakan huruf kecil.
Saya telah mencoba mempersempit di mana kesalahan mungkin terjadi, dan telah mencapai https://github.com/jsdom/jsdom/blob/b83783da63deeb7c5602b024a92e214df423a412/lib/jsdom/level3/xpath.js#L1659
Menyetel nilai shouldLowerCase
ke false
memperbaiki kasus penggunaan saya, tetapi saya tidak mengetahui implikasi apa yang ada pada implementasi XPath lainnya.
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 ,konsol
Kueri XPath peka huruf besar-kecil dan dapat dicocokkan dengan node dengan atribut dengan karakter huruf besar.
Kami sudah lama memiliki tugas untuk mengganti implementasi xpath gulung tangan kuno kami dengan yang dikelola pihak ketiga. Itu mungkin rute terbaik untuk memperbaikinya, meskipun PR perbaikan-spot dengan tes juga dapat diterima.
Hai, ada pembaruan?
Komentar yang paling membantu
https://mobile.twitter.com/slicknet/status/782274190451671040