Jsdom: تفشل استعلامات XPath الخاصة بمستند XML الذي تم تحليله مع سمات الأحرف الكبيرة

تم إنشاؤها على ١٢ مارس ٢٠١٩  ·  3تعليقات  ·  مصدر: jsdom/jsdom

معلومات أساسية:

  • إصدار Node.js: 8.9.1
  • إصدار jsdom

عند استخدام 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 حساس لحالة الأحرف ويمكن أن يتطابق مع العقد ذات السمات ذات الأحرف الكبيرة.

x(ht)ml

التعليق الأكثر فائدة

ال 3 كومينتر

لقد كان لدينا ما يجب عمله لفترة طويلة لاستبدال تطبيق xpath القديم الملفوف يدويًا بتطبيق طرف ثالث تم الحفاظ عليه. ربما يكون هذا هو أفضل طريق لإصلاح هذا ، على الرغم من أن العلاقات العامة الإصلاحية مع الاختبار ستكون مقبولة أيضًا.

مرحبًا ، أي تحديثات؟

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات