سؤال

أنا أستخدم HtmlAgilityPack.أقوم بإنشاء HtmlDocument وLoadHtml باستخدام السلسلة التالية:

<select id="foo_Bar" name="foo.Bar"><option selected="selected" value="1">One</option><option value="2">Two</option></select>

هذا يفعل بعض الأشياء غير المتوقعة.أولاً، يعطي خطأين في المحلل اللغوي، EndTagNotRequired.ثانيًا، تحتوي عقدة التحديد على 4 أطفال - اثنان لعلامات الخيار واثنان آخران للنص الداخلي لعلامات الخيار.وأخيرًا، يكون OuterHtml على النحو التالي:

<select id="foo_Bar" name="foo.Bar"><option selected="selected" value="1">One<option value="2">Two</select>

لذا فقد قررت في الأساس أن أسقط علامات الإغلاق على الخيارات.دعونا نترك جانبا للحظة ما إذا كان من المناسب والمرغوب فيه القيام بذلك.أنا أستخدم HtmlAgilityPack لاختبار كود إنشاء HTML، لذلك لا أريد أن يتخذ أي قرار نيابةً عني أو يعطي أي أخطاء ما لم يكن HTML مشوهًا حقًا.هل هناك طريقة ما لجعله يتصرف كما أريد؟حاولت ضبط بعض الخيارات لـ HtmlDocument وتحديدًا:

 doc.OptionAutoCloseOnEnd = false;
 doc.OptionCheckSyntax = false;
 doc.OptionFixNestedTags = false;

هذا لا يعمل.إذا لم يتمكن HtmlAgilityPack من فعل ما أريد، فهل يمكنك أن توصي بشيء يمكنه القيام بذلك؟

هل كانت مفيدة؟

المحلول

تم الإبلاغ عن نفس الخطأ بالضبط في مناقشة الصفحة الرئيسية لـ HAP، ولكن يبدو أنه لم يتم إجراء أي إصلاحات ذات معنى للمشروع منذ بضع سنوات.غير مشجعة.

يشير التصفح السريع للمصدر إلى أن الخطأ قد يكون قابلاً للإصلاح من خلال التعليق على السطر 92 من HtmlNode.cs:

// they sometimes contain, and sometimes they don 't...
ElementsFlags.Add("option", HtmlElementFlag.Empty);

(في الواقع لا، فهي تحتوي دائمًا على نص التسمية، على الرغم من أن السلسلة الفارغة ستكون أيضًا نصًا صالحًا.قد يحذف المؤلف المهمل العلامة النهائية، ولكن هذا ينطبق على أي عنصر.)

يضيف

الحل المكافئ يدعو HtmlNode.ElementsFlags.Remove("option"); قبل أي استخدام للمحرر (دون الحاجة إلى تعديل الكود المصدري للمحرر)

نصائح أخرى

يبدو أن هناك سببًا لعدم تحليل علامة Option كعلامة "عامة" للامتثال لـ XHTML، إلا أن هذا قد يكون بمثابة ألم حقيقي في الرقبة.

اقتراحي هو إجراء استبدال كامل للسلسلة وتغيير جميع علامات "الخيار" إلى علامات "my_option"، وبهذه الطريقة يمكنك:

  1. لا يتعين عليك تعديل مصدر المكتبة (ويمكنك ترقيتها لاحقًا).
  2. يمكن تحليل كما تفعل عادة.

يمكن العثور على المنشور الأصلي في منتدى HtmlAgilityPack على:http://htmlagilitypack.codeplex.com/Thread/View.aspx?ThreadId=14982

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top