标签: nsxmlparser

使用NSXMLParser解析时,是否下载整个.xml然后解析,还是进行流式解析?

为iPhone编程.

使用NSXMLParser解析时,是否下载整个.xml然后解析,还是执行"流式"解析?基本上如果我中途解析解析,我可以节省带宽,还是只是cpu周期?

xml iphone nsxmlparser

5
推荐指数
1
解决办法
1349
查看次数

使用带有NSThread的Singleton同步数组

我有一个带有UISearchBar的书籍应用程序,用户可以在其中键入任何书名并在下面输入搜索结果(来自ext API调用).

我在我的应用程序中使用了一个名为retrieveArray的单例变量,它存储了所有书籍.

@interface Shared : NSObject {
    NSMutableArray *books;
}

@property (nonatomic, retain) NSMutableArray *books;

+ (id)sharedManager;

@end
Run Code Online (Sandbox Code Playgroud)

使用NSMutableArray*retrieveArray在多个.m文件中访问它; ...在头文件中

retrievedArray = [[Shared sharedManager] books];
Run Code Online (Sandbox Code Playgroud)

我的问题是如何确保ret​​rieveArray中的值在所有类中保持同步.

实际上,retrieveArray中的值通过NSXMLParser(即通过外部Web服务API)添加.有一个单独的XMLParser.m文件,我在那里进行所有解析并填充数组.解析在单独的线程上完成.

    - (void) run: (id) param  {
        NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

        NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL: [self URL]];
        [parser setDelegate: self];
    [parser parse];
        [parser release];

        NSString *tmpURLStr = [[self URL]absoluteString];

        NSRange range_srch_book = [tmpURLStr rangeOfString:@"v1/books"];

        if (range_srch_book.location != NSNotFound) 
            [delegate performSelectorOnMainThread:@selector(parseDidComplete_srch_book) withObject:nil waitUntilDone:YES];

        [pool release];
    } 


    - (void) parseXMLFile: (NSURL …
Run Code Online (Sandbox Code Playgroud)

iphone cocoa-touch objective-c nsxmlparser uisearchbar

5
推荐指数
1
解决办法
1168
查看次数

在NSXMLParser中解析xml

我已经阅读了很多关于如何从xml文件中获取文本的示例,但只是不知道如何.这是一个示例xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<questions>
    <set>
        <question>Question</question>
        <answer>Answer</answer>
    </set>
</questions>
Run Code Online (Sandbox Code Playgroud)

-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI,有什么获得的值最简单的方法QuestionAnswer?我已经把我的解析器委托连接起来了.

xcode objective-c nsxmlparser xml-parsing ios

5
推荐指数
1
解决办法
1万
查看次数

使用NSXMLParser仅解析前十个帖子,然后分别解析下一个帖子

我正在使用NSXmlParser来解析rss feed.到目前为止一切运作良好.

我预计rss feed最终会包含几十个/几百个帖子.我目前的解决方案是读取整个RSS Feed并显示结果.但是我想只阅读前十个帖子(以防止它解析可能有数百个项目).然后在稍后的时间(例如当用户到达表的末尾时)来解析接下来的十个帖子.

所以我的问题是如何解析前十个帖子,然后解析接下来的十个帖子,然后解析接下来的十个帖子等等......

这是我用来获取所有帖子的内容:

- (void)parseXMLFileAtURL:(NSString *)URL
{   
    myArray = [[NSMutableArray alloc] init];

    //convert the path to a proper NSURL or it won't work
    NSURL *xmlURL = [NSURL URLWithString:URL];

    rssParser = [[NSXMLParser alloc] initWithContentsOfURL:xmlURL];
    [rssParser setDelegate:self];
    [rssParser parse];

}

- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError {
    //error
}

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{            

    currentElement = [elementName copy];

    if ([elementName isEqualToString:@"item"]) {
        //clear out our story item caches...
        item = [[NSMutableDictionary alloc] init]; …
Run Code Online (Sandbox Code Playgroud)

rss xcode nsxmlparser nsxml ios

5
推荐指数
2
解决办法
1173
查看次数

延迟UISearchbar解析

我的应用程序中有一个UISearchbar.这是一个动态搜索,当用户输入文本时,通过远程API调用(我认为是通过REST)搜索远程数据库.

当用户键入时,表视图会动态刷新.我正在使用NSXMLParser来解析XML结果.(所以3个委托方法; didStartElement,didEndElement)

在某些情况下,结果中显示重复的条目,例如,如果用户键入了YAH,则显示YAHOO 3-4次.我不知道为什么.

如何减少解析完成的次数,或者如何延迟解析,以便它不会对用户输入/删除的每个字符发出请求.

我假设,这可能会解决问题.

iphone objective-c nsxmlparser uisearchbar

4
推荐指数
1
解决办法
1729
查看次数

如何根据tableviewcell选择将子视图的nsdictionary保存到主视图

我目前正在解析一些看起来像这样的xml

<Rows>
<Row MANUFACTURERID="76" MANUFACTURERNAME="Fondont" ISMANU="F" ISAUTO="F"/>
<Row MANUFACTURERID="18" MANUFACTURERNAME="Anti" ISMANU="T" ISAUTO="T"/>
</Rows>
Run Code Online (Sandbox Code Playgroud)

我解析它,以便有一个字典数组(每个字典都有行的四个值).

然后我将ManufacturerName传递给我的startSortingTheArray方法

if (dataSetToParse == @"ICMfg") // ICMfg is a string passed to this view from the parent view cell selection enabling me to pass different data sets to this view
    {
       //Filter results (ISAUTO = T)
        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K like %@",@"ISAUTO",@"T"];
        NSArray *filteredArray = [myDataArray filteredArrayUsingPredicate:predicate];
        //Passes Manufacturer strigs over to startSortingtheArray method
        [self startSortingTheArray:[filteredArray valueForKey:@"MANUFACTURER"]];
    }
Run Code Online (Sandbox Code Playgroud)

因此,从这里将所有ManufacturerNames作为字符串数组发送到我的方法.然后我使用这个数组来设置我的所有section/index-scroller.下面的方法显示了我是如何做到这一点的.

//method to sort array and split …
Run Code Online (Sandbox Code Playgroud)

iphone uitableview nsxmlparser ios

4
推荐指数
1
解决办法
437
查看次数

使用NSXMLParser initWithStream:没有收到解析器委托方法

我正在处理的基本问题是使用NSStream类来解析传入的增量XML数据.数据永远不是一个完整的XML文档,但我希望根据套接字可以读取的内容以增量块的形式接收和处理它.

看一下文档NSXMLParser,似乎initWithStream:初始化a 的方法NSXMLParser将是我问题的完美解决方案.我可以使用a初始化解析器,NSInputStream然后在我通过套接字接收数据时调用该parse方法,然后NSXMLParser应该调用NSXMLParser委托.

但是,我没有看到任何被调用的委托,我看到被调用的唯一方法是流委托stream:handleEvent:.Apple或其他开发人员似乎很少或没有此API的示例.关于我做错了什么或如何initWithStream:正确使用的任何想法?

ContentParser.h

@interface ContentParser : NSObject <NSStreamDelegate, 
                                     NSXMLParserDelegate>
{
   NSInputStream *inputStream;
   NSOutputStream *outputStream;
   NSMutableData *receivedData;
   NSXMLParser *xmlParser;
}
- (void)initStream;
Run Code Online (Sandbox Code Playgroud)

ContentParser.m

@implementation ContentParser

- (void)initStream
{    
   CFReadStreamRef readStream;
   CFWriteStreamRef writeStream;

   CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault, 
                                     (CFStringRef)@"<hostname>", 
                                     <port>, 
                                     &readStream, 
                                     &writeStream);

   inputStream = (__bridge NSInputStream *)readStream;
   outputStream = (__bridge NSOutputStream *)writeStream;

   inputStream.delegate = self;
   outputStream.delegate = self;

   [inputStream  scheduleInRunLoop:[NSRunLoop currentRunLoop]
                           forMode:NSDefaultRunLoopMode];
   [outputStream scheduleInRunLoop:[NSRunLoop …
Run Code Online (Sandbox Code Playgroud)

cocoa objective-c nsxmlparser nsinputstream nsstream

4
推荐指数
1
解决办法
2493
查看次数

Xcode"AppDelegate*const __strong'到不兼容类型的参数"错误

当我appDelegate按如下方式声明接口以进行设置时NSXMLParserDelegate,我从其他使用[[UIApplication sharedApplication]委托]的视图中收到一些警告;

@interface AppDelegate : UIResponder <UIApplicationDelegate, NSXMLParserDelegate>
Run Code Online (Sandbox Code Playgroud)

警告:使用不兼容类型"id"的表达式初始化"AppDelegate*__ strong"

但是,如果我删除它,由于xmlParser的自设置,会出现另一个警告,

@interface AppDelegate : UIResponder <UIApplicationDelegate>
Run Code Online (Sandbox Code Playgroud)

警告:将'AppDelegate*const __strong'发送到不兼容类型'id'的参数

    xmlParser = [[NSXMLParser alloc] initWithData:receivedData];
    [xmlParser setDelegate:self];
Run Code Online (Sandbox Code Playgroud)

如何删除?谢谢

iphone cocoa-touch objective-c nsxmlparser ios

4
推荐指数
1
解决办法
1万
查看次数

应用程序包中的文件路径

我之前做了很多次,但现在失败了.我想访问我的应用程序中提供的文件.

NSString* path = [[NSBundle mainBundle] pathForResource:@"information" ofType:@"xml"];
Run Code Online (Sandbox Code Playgroud)

回报

/Users/eldude/Library/Application Support/iPhone Simulator/7.0.3/Applications/5969FF96-7023-4859-90C0-D4D03D25998D/App.app/information.xml
Run Code Online (Sandbox Code Playgroud)

这是正确的 - 在终端和所有这些检查.但是,尝试解析路径失败

    NSURL* fileURL = [NSURL URLWithString:path];

    NSXMLParser *nsXmlParser = [[NSXMLParser alloc] initWithContentsOfURL:fileURL];

    [nsXmlParser setDelegate:self];

    if(![nsXmlParser parse]){
        NSError* e = nsXmlParser.parserError;
        NSLog(@"ERROR parsing XML file: \n %@",e);
        self = NULL;
    }
Run Code Online (Sandbox Code Playgroud)

Error Domain=NSCocoaErrorDomain Code=-1 "The operation couldn’t be completed. (Cocoa error -1.)" UserInfo=0xb9256f0 {NSXMLParserErrorMessage=Could not open data stream}
Run Code Online (Sandbox Code Playgroud)

想法有人吗?

nsxmlparser ios ios7 swift

4
推荐指数
1
解决办法
2197
查看次数

NSXMLParser对&符号进行扼流

我正在使用NSXMLParser解析一些HTML,并且只要遇到&符号就会遇到解析器错误.在解析它之前我可以过滤出&符号,但我宁愿解析那里的所有内容.

它给了我错误68,NSXMLParserNAMERequiredError:名称是必需的.

我最好的猜测是它是一个字符集问题.我对字符集的世界有点模糊,所以我认为我的无知正在咬我的屁股.源HTML使用charset iso-8859-1,所以我使用此代码初始化Parser:

NSString *dataString = [[[NSString alloc] initWithData:data encoding:NSISOLatin1StringEncoding] autorelease];
NSData *dataEncoded = [[dataString dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES] autorelease];
NSXMLParser *theParser = [[NSXMLParser alloc] initWithData:dataEncoded];
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

iphone cocoa objective-c nsxmlparser

3
推荐指数
1
解决办法
4114
查看次数