تحليل التغذية RSS باستخدام TouchXML ، لا توجد علامات
-
25-09-2019 - |
سؤال
أحاول تحليل خلاصة 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
بعد إجراء هذه المكالمة؟