عند استخدام XPath للاستعلام عن / تقييم مستند XML تم إنشاؤه بواسطة DOMParser الخاص بـ JSDOM ، يبدو أن جزء السمة من الاستعلام قد تم فرضه على الأحرف الصغيرة ، مما يجعل من المستحيل الاستعلام عن السمات التي تحتوي على أحرف ذات غلاف علوي.
على سبيل المثال ، بالنظر إلى المستند التالي:
<?xml version="1.0" encoding="utf-8"?><example Foo="bar"></example>
^-- capital F
لا يُرجع الاستعلام عن //*[@Foo="bar"]
(أو //*[@foo="bar"]
لهذه المسألة) أي مطابقات ، ولكن بالنظر إلى هذا المستند بدلاً من ذلك بسمات الأحرف الصغيرة:
<?xml version="1.0" encoding="utf-8"?><example foo="bar"></example>
^-- lower case F
الآن مع هذه الوثيقة الجديدة، //*[@foo="bar"]
(وحالة العلوي ما يعادل //*[@Foo="bar"]
) تجد بنجاح المباراة.
لقد وجدت مشكلة مماثلة منذ وقت طويل (https://github.com/jsdom/jsdom/issues/651) تم إصلاحها من خلال تقديم Saxes لتحليل مستندات XML بشكل منفصل عن مستندات HTML ، ولكن حاليًا على مستوى التحليل كل شيء يبدو أنه تم تحليله بشكل صحيح (على سبيل المثال ، تحتفظ السمات بقضيتها). في مستوى تقييم XPath يبدو أن الاستعلام ذو غلاف أقل.
لقد حاولت تضييق نطاق حدوث الخطأ ، ووصلت إلى https://github.com/jsdom/jsdom/blob/b83783da63deeb7c5602b024a92e214df423a412/lib/jsdom/level3/xpath.js#L1659
تعيين shouldLowerCase
إلى false
إصلاحات لحالة الاستخدام الخاصة بي ، لكنني لست على دراية بالآثار المترتبة على بقية تنفيذ 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 ، وحدة التحكم
استعلام XPath حساس لحالة الأحرف ويمكن أن يتطابق مع العقد ذات السمات ذات الأحرف الكبيرة.
لقد كان لدينا ما يجب عمله لفترة طويلة لاستبدال تطبيق xpath القديم الملفوف يدويًا بتطبيق طرف ثالث تم الحفاظ عليه. ربما يكون هذا هو أفضل طريق لإصلاح هذا ، على الرغم من أن العلاقات العامة الإصلاحية مع الاختبار ستكون مقبولة أيضًا.
مرحبًا ، أي تحديثات؟
التعليق الأكثر فائدة
https://mobile.twitter.com/slicknet/status/782274190451671040