سؤال

حاولت استخدام activeresource لتحليل خدمة ويب كانت أكثر وكأنها مستند HTML وظل احصل على خطأ 404.

هل أحتاج إلى استخدام محلل XML لهذه المهمة بدلا من activeresource؟

تخميني هو أن activeresource مفيد فقط إذا كنت تستهلك بيانات من تطبيق قضبان آخر ويتم ترجمة بيانات XML بسهولة إلى نموذج القضبان. على سبيل المثال، إذا كانت خدمة الويب أكثر عرضة XML مثل مستند HTML أو تغذية RSS، فأنت تريد استخدام محلل مثل HPRICOT أو Nokogiri. هل هذا صحيح؟

كيف تعرف متى تستخدم محلل XML وعند استخدام activeresource؟

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

المحلول

تحديث: activeresource ليس أيضا محلل XML. إنه مستهلك مستهلك يسمح لك بالتفاعل مع مورد بعيد مماثل لكيفية نموذجك لنموذج activerecord. يستخدم محلل XML تحت غطاء محرك السيارة (أنا أفترض من خلال XMLMini ActiveSupport عرض أدناه).

لدى Activeresource بعض المتطلبات الصارمة حول هيكل محتوى XML ويعمل بشكل أفضل عند التفاعل مع API بقية تطبيق القضبان آخر. ليس المقصود القيام بشاشة عامة تجريف صفحة HTML. لهذا استخدام nokogiri مباشرة.


ActiveSupport ليس محللا XML، بل هو مجموعة متنوعة من أساليب ودروس روبي مفيدة. ومع ذلك، فإنه يوفر غلافا حول العديد من محلل XML مختلف يمنحك واجهة ثابتة.

يمكنك أن ترى أي محلل XML يستخدم والتبديل إلى محلل XML مختلف. جرب هذا script/console.

ActiveSupport::XmlMini.backend # => ActiveSupport::XmlMini_REXML
ActiveSupport::XmlMini.backend = 'Nokogiri'
ActiveSupport::XmlMini.backend # => ActiveSupport::XmlMini_Nokogiri
# it will now use Nokogiri

ومع ذلك، فإن ذلك سيظل يستخدم محلل XML في Nokogiri الذي يفترض علامات صارمة وصحية. لا تتناسب معظم صفحات HTML هذا الشرط الصارم وبالتالي فمن الأفضل استخدام محلل HTML الخاص ب Nokogiri مباشرة بدلا من الذهاب إلى ActiveSupport.

doc = Nokogiri::HTML(...)

نصائح أخرى

كتبت xmlmini لأنني أردت الإجابة على نفس السؤال. XMLMINI لا تفعل الكثير حقا، وهذا يتيح لها البقاء مركزة. ولكن إذا كان لديك أي مشكلة لا تكون yaml أو json مؤهلا للتعامل معها، فلن يقوم Xmlmini بعمل المهمة أيضا.

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

وبالمثل، إذا كنت تتعامل مع البيانات التي تعزز العنصر القياسي وسليل السمات من مكان آخر، مثل بما في ذلك مقتطفات UBL أو OpenDoc أو Atom، يجب عليك حقا الحصول على بعض الأدوات الأفضل لمساحات الأسماء.

يذكر Ryanb Nokogiri، ولا أستطيع التفكير في أي شيء رائع لهذه الأشياء. لقد حصلت على كل قوة Libxml، مع المزيد من الأناقة من أي مكتبة تقريبا في Ruby. لا أقصد مجرد تحليل XML، الأمر متروكا مع أفضل مشاريع _ لماذا

ولكن هناك بعض الأشياء التي لم يتم تصميمها حتى Nokogiri. إذا كنت حقا، فالحتاج بشكل إيجابي إلى قتل كل زاوية قوس في الغرفة في سرعة كسر الرقبة، عليك أن تمثال نصفي خارج SAX. ولكن إذا كنت بحاجة إلى السرعة، فلا تفعل ذلك في روبي. هل تفعل ذلك في المغتربين أو LIBXML مع نقية C. أو لا تفعل ذلك على الإطلاق.

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