سؤال

أحاول تحليل خلاصة RSS في التدفق على سؤال محدد:https://stackoverflow.com/feeds/question/2110875

لهذا أنا أستخدم مكتبة TouchXML. يبدو أن هناك مشكلة في الكود التالي:

CXMLDocument *parser = [[CXMLDocument alloc] initWithData:sourceData options:0 error:nil];
NSArray *allEntries = [parser nodesForXPath:@"//entry" error:nil];
NSLog(@"Found entries: %d",[allEntries count]); //Returns 0

يجب أن يعيد بيان NSLOG عدد جميع الإدخالات في التغذية. في هذه الحالة ، يجب أن تكون "3" ، وهي المشكلة هي أنها تعود 0.

لقد وجدت أن قطعة الكود هذه تعمل:

CXMLDocument *preParser = [[CXMLDocument alloc] initWithData:sourceData options:0 error:nil];
NSString *sourceStringUTF8 = [preParser XMLString];
[preParser release];

CXMLDocument *parser = [[CXMLDocument alloc] initWithData:[sourceStringUTF8 dataUsingEncoding:NSUTF8StringEncoding] options:0 error:nil];
NSArray *allEntries = [parser nodesForXPath:@"//entry" error:nil];
NSLog(@"Found entries: %d",[allEntries count]); //Returns 3, which is ok

ولكن باستخدام هذا يبدو اختراقًا (ربما يكون) ويقدم بعض الحشرات المتقطعة الأخرى.

بقدر ما أعرف تعبير XPath صحيح. لقد راجعته باستخدام هذه الصفحة كذلك.

هل يمكن لأي شخص مساعدتي في هذه المشكلة ، أو توجيهني في الاتجاه الصحيح.

شكرًا.

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

المحلول

كان لي مشكلة مشابهة جدا. هذا له علاقة بمساحة اسم XML ، والتي لا تدعمها TouchXML جيدًا (مشكلة معروفة).

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

طريقة أسهل هي مجرد التغيير

<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">

استبدال ببساطة

<html>

و XPath يعمل الآن.

نصائح أخرى

ربما تبدأ بالفعل باستخدام ذلك error حجة ل nodesForXPath:error لمعرفة ما إذا كان يعيد خطأ؟ وتحقق إذا allEntries ليس nil بعد إجراء هذه المكالمة؟

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