2011-10-20 88 views
0

我對編程很陌生並且有問題。我一直在使用touchxml進行分析,之前沒有任何問題。現在我想解析一個xml字符串。 我找遍了整個互聯網,但無法找到答案(我從來沒有做過initWithXMLString之前也許我做錯了什麼嗎?)無法使用觸摸xml解析xml

我解析當前的代碼:

NSArray *resultNodes = NULL; 
CXMLDocument *rssParser = [[CXMLDocument alloc] initWithXMLString:str options:0 error:nil]; 
NSString *strName; 
resultNodes = [rssParser nodesForXPath:@"//FictionBook" error:nil]; 
NSLog(@"RESULT NODE COUNT =%d",[resultNodes count]); 

和我的字符串是這樣的:

"<?xml version="1.0" encoding="UTF-8"?> 
<FictionBook xmlns="http://www.gribuser.ru/xml/fictionbook/2.0" xmlns:l="http://www.w3.org/1999/xlink"><description><title-info><genre>prose_contemporary</genre> <author><first-name>Мария</first-name><last-name>Метлицкая</last-name><id>f97cbf85-bb7c-102b-8639-bb1d5f8374bd</id></author><book-title>Наша маленькая жизнь (сборник)</book-title> <annotation><p>Мария Метлицкая рассказывает о простых людях – они не летают в космос, не блистают на подмостках сцены, их не найдешь в списке Forbеs.</p></annotation></description></title-info></FictionBook>" 

XML apears是有效的,我查了一下10 XML驗證。

但是我從[resultNodes count]中得到0。

有人遇到過類似的事嗎?

在此先感謝!

+0

看着你的xml字符串並且結束爲,應該按其他方式關閉的順序嗎? – Saran

+0

@Saran jap它應該是,看到我的xml文件是非常大的,所以我不想在這裏發佈它,所以我自己在這裏寫了結束標籤。 但我認爲問題在其他地方.. – Lukas

+0

我希望你有一些非常好的理由不使用NSXMLParser! – Devarshi

回答

0

嘗試查看是否有在解析錯誤:

NSError *error; 
NSArray *resultNodes = NULL; 
CXMLDocument *rssParser = [[CXMLDocument alloc] initWithXMLString:str options:0 error:&error]; 
NSLog("Error: %@",error); 

也做你的XML包含命名空間的元素?

+0

當它嘗試註銷錯誤時,它會引發exc_bad_access,但實際上並沒有明白爲什麼會發生這種情況。 – Lukas

+0

這可能是因爲沒有錯誤信息? – Lukas

+0

我會標記你的答案是正確的,因爲你最接近我的問題的答案,這是因爲具有名稱空間的元素,因爲根元素有兩個我不得不做類似於這個職位:http:// stackoverflow.com/questions/7295605/cxmldocument-cxmlnode-nodeforxpath-problem 謝謝大家! – Lukas

0

首先讓你驗證xml是否通過這個http://www.xmlvalidation.com/驗證,如果驗證,那麼你沒有得到任何迴應,那麼你應該檢查錯誤代碼是什麼錯誤是由XML解析器拋出,然後嘗試通過錯誤代碼檢查什麼是問題。

+0

感謝您的幫助!但我已經嘗試過,沒有運氣。 另外我試圖得到像Maciulis提供的錯誤 NSError *錯誤; NSArray * resultNodes = NULL; CXMLDocument * rssParser = [[CXMLDocument alloc] initWithXMLString:str options:0 error:&error]; NSLog(「錯誤:%@」,錯誤); 但是然後exc_bad_access來了.. – Lukas

+0

你得到解析器代表中的任何錯誤代碼?如果不是這樣的話,請在這個演示中用nsxml解析器嘗試xml,這是一個很好的例子,至少你可以通過不同的方法來識別問題。 – Ballu