2011-10-20 90 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