سؤال

يمكن لأي شخص أن يوصي ج أو الهدف C مكتبة HTML تحليل?فإنه يحتاج للتعامل مع الفوضى الكود التي لن تماما من صحة.

هل هذه المكتبة موجودة ، أو أنا أفضل حالا مجرد محاولة استخدام التعبيرات العادية?

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

المحلول 2

ويبدو libxml2.2 يأتي في SDK، ويدعي libxml/HTMLparser.h ما يلي:

<اقتباس فقرة>   

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

وهذا يبدو وكأنه ما أحتاج، لذلك ربما انا ذاهب الى استخدام ذلك.

نصائح أخرى

وجدت باستخدام hpple مفيدة جدا لتحليل فوضوي HTML.Hpple المشروع هو الهدف-C المجمع على XPathQuery مكتبة تحليل HTML.استخدامه يمكنك إرسال استعلام XPath و الحصول على النتيجة .

متطلبات:

-إضافة libxml2 يشمل المشروع الخاص بك

  1. من القائمة المشروع->تحرير إعدادات المشروع
  2. البحث عن الإعداد "رأس مسارات البحث"
  3. إضافة جديدة في مسار البحث "${SDKROOT}/usr/وتشمل/libxml2"
  4. تمكين الخيار العودية

-إضافة libxml2 المكتبة إلى أن المشروع الخاص بك

  1. من القائمة المشروع->تحرير إعدادات المشروع
  2. البحث عن الإعداد "أعلام رابط الأخرى"
  3. إضافة إلى بحث جديد العلم "-lxml2"

-من hpple الحصول على الكود التالي الملفات وإضافتها إلى المشروع الخاص بك:

  1. TFpple.ح
  2. TFpple.م
  3. TFppleElement.ح
  4. TFppleElement.م
  5. XPathQuery.ح
  6. XPathQuery.م

-اتخاذ المشي على w3school XPath التعليمي أن تشعر بالراحة مع XPath اللغة.

التعليمات البرمجية المثال

#import "TFHpple.h"

NSData *data = [[NSData alloc] initWithContentsOfFile:@"example.html"];

// Create parser
xpathParser = [[TFHpple alloc] initWithHTMLData:data];

//Get all the cells of the 2nd row of the 3rd table 
NSArray *elements  = [xpathParser searchWithXPathQuery:@"//table[3]/tr[2]/td"];

// Access the first cell
TFHppleElement *element = [elements objectAtIndex:0];

// Get the text within the cell tag
NSString *content = [element content];  

[xpathParser release];
[data release];

المشكلات المعروفة

كما hpple هي التفاف على XPathQuery الذي هو آخر المجمع هذا الخيار ربما ليس الأكثر كفاءة.إذا كان الأداء قضية في المشروع الخاص بك ، أوصي إلى التعليمات البرمجية الخاصة بك خفيفة الوزن الحل على أساس hpple و xpathquery مكتبة التعليمات البرمجية.

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

في وظيفة * PerformXPathQuery، إذا تم العثور على العقد أن تكون لا شيء، فإنه يقفز من قبل تنظيف.

وهكذا حيث ترى هذا الشيء من التعليمات البرمجية: إضافة في خطوط تنظيف اثنين

.
  xmlNodeSetPtr nodes = xpathObj->nodesetval;
  if (!nodes)
    {
      NSLog(@"Nodes was nil.");
        /* Cleanup */
        xmlXPathFreeObject(xpathObj);
        xmlXPathFreeContext(xpathCtx);
      return nil;
    }

إذا كنت تفعل الكثير من الاعراب، انها تسرب الحلقة. الآن .... كيف يمكنني الحصول على ليلة وظهري: -)

وكتبت المجمع خفيفة الوزن حول libxml التي ربما مفيدة:

الهدف-C-HMTL-محلل

وهذا ربما يتوقف على مدى الفوضى في HTML هي وماذا تريد استخراج. ولكن عادة مرتب يفعل تماما على وظيفة جيدة. هو مكتوب في C وأعتقد يجب أن تكون قادرا على بناء وربطه للآيفون بشكل ثابت. يمكنك بسهولة تثبيت النسخة سطر الأوامر واختبار النتائج أولا.

وأنت قد ترغب في التحقق من ElementParser. ويوفر "ما يكفي" إعراب HTML و XML. واجهات جميلة تجعل يتجول XML وثائق HTML / اضحة جدا. http://touchtank.wordpress.com/

وماذا عن استخدام المكون بكت، وربما ثالث حزب حزم مثل مسج للقيام بمهام مثل هذه؟ لن يكون من الممكن لجلب البيانات HTML في عنصر غير مرئي والاستفادة من محددات ناضجة جدا من الأطر جافا سكريبت؟

وGData الهدف-C API جوجل reimplements NSXMLElement والفئات الأخرى ذات الصلة أن أبل إزالتها من SDK فون. يمكنك العثور عليها هنا http://code.google.com/p/gdata- سي-الكائنية العميل / . لقد استعملت للتعامل الرسائل عبر جابر. بالطبع إذا تم المشوهة HTML الخاص بك (في عداد المفقودين علامات إغلاق) وهذا قد لا يساعد كثيرا.

ونحن نستخدم Convertigo تحليل HTML على جانب الملقم وإرجاع الخدمات JSON على شبكة الإنترنت نظيفة ومرتبة لدينا تطبيقات المحمول

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