标签: nsxml

NSXMLParser无法解析特殊字符(重音符号)

我正在使用NSXMLParser从url解析xml(我的代码与此处的代码几乎完全相同)

一些元素包含特殊字符,如"á",这使得一个单词很可能被分成两个(á和ndre).

这是我的loadXMLByURL

-(id) loadXMLByURL:(NSString *)urlString{
tickets     = [[NSMutableArray alloc] init];
NSURL *url      = [NSURL URLWithString:urlString];
NSData  *data   = [[NSData alloc] initWithContentsOfURL:url];
parser          = [[NSXMLParser alloc] initWithData:data];
parser.delegate = self;
[parser parse];
return self;}
Run Code Online (Sandbox Code Playgroud)

我很确定这是因为没有设置编码(我认为它需要是NSUTF8StringEncoding)但我不知道在哪里/如何应用它.

[更新]我的其余代码......

- (void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{    
    if ([elementname isEqualToString:@"ticket"]) 
    {
        currentTicket = [Ticket alloc];
    }

}

- (void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
    if ([elementname isEqualToString:@"name"]) 
    {
        currentTicket.name = currentNodeContent;
    } …
Run Code Online (Sandbox Code Playgroud)

xcode nsxmlparser nsxml xml-parsing nsxmlelement

10
推荐指数
1
解决办法
9332
查看次数

NSXMLParser泄漏

我有以下代码泄漏.仪器说它是rssParser对象泄漏.我"刷新"XML feed并运行块并且它泄漏....

file.h

@interface TestAppDelegate : NSObject <UIApplicationDelegate> {

    NSXMLParser *rssParser;

}
Run Code Online (Sandbox Code Playgroud)

file.m

NSData *data = [ NSURLConnection sendSynchronousRequest:request returningResponse: nil error: nil ];
    rssParser = [[NSXMLParser alloc] initWithData:data];
    [rssParser setDelegate:self];
    [rssParser setShouldProcessNamespaces:NO];
    [rssParser setShouldReportNamespacePrefixes:NO];
    [rssParser setShouldResolveExternalEntities:NO];
    [rssParser parse];
    [rssParser release];
Run Code Online (Sandbox Code Playgroud)

泄漏的图像....

alt text http://www.shipfinder.co.uk/images/memoryleak.png

iphone memory-leaks nsxmlparser nsxml

9
推荐指数
1
解决办法
6016
查看次数

Cocoa - 如何格式化XML文件

有没有办法在编程时以正确的方式格式化XML文件?

例如,如果我使用此代码创建一个简单的XML文件:

NSXMLElement *fallback_driver = [[NSXMLElement alloc] initWithName:@"fallback-driver"];

NSXMLElement *folder = [[NSXMLElement alloc] initWithName:@"folder"];
[folder setStringValue:[ads_make objectValueOfSelectedItem]];
NSXMLElement *filename =[[NSXMLElement alloc] initWithName:@"filename"];
[filename setStringValue:ads_driver_name_selected];

[fallback_driver addChild:folder];
[fallback_driver addChild:filename];

NSXMLElement* rootNode = [ads_user_printxml rootElement];
[rootNode addChild:fallback_driver];
Run Code Online (Sandbox Code Playgroud)

当这个运行时,我想按照下图中的注释部分输出,而不是实际的XML(没有注释).

xml代码

我如何以这种方式格式化XML文件?谢谢!

PS

谢谢你的答案.但是,我想将我拥有的NSXMLDocument转换为NSData以便保存...

我在尝试

NSData *newData = [[ads_user_printxml XMLDataWithOptions:NSXMLNodePrettyPrint]XMLData];
Run Code Online (Sandbox Code Playgroud)

但是我收到一条警告,"'NSData'可能无法响应'-XMLData',在我添加XMLDataWithOptions之前,它工作得很好.我也尝试了'XMLStringWithOptions'方法(如你所说 - 但是认为数据更多适当的),但产生了相同的警告.

有任何想法吗?非常感谢!

cocoa objective-c nsxml

6
推荐指数
1
解决办法
1931
查看次数

使用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
查看次数

带有solo标签的NSXMLElement.即.<tagname attributename = attributevalue />

我正在尝试创建一个应该包含solo标签的XML字符串(即.标签没有单独的结束标签)我能够创建正常的xml标签,如

<tagname attribute=attributevalue></tagname>
Run Code Online (Sandbox Code Playgroud)

使用代码

NSXMLElement *childElement=[[NSXMLElement alloc] initWithName:childName];
childElement.stringValue=childValue;
[childElement addAttribute:[NSXMLNode attributeWithName:attributeName stringValue:attributeValue]];
[self.currentNode addChild:[childElement copy]];
Run Code Online (Sandbox Code Playgroud)

但我需要这样的

<tagname attributename=attributevalue />
Run Code Online (Sandbox Code Playgroud)

macos objective-c nsxml nsxmldocument nsxmlelement

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

将CDATA块写入NSXMLDocument文件

如何在XML文件中写入CDATA块并将其保存到cocoa中的文件中.

cocoa nsxml

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

NSXML将"<"替换为"%lt;"

我看到还有其他与此相关的问题,但没有使用NSXML.

所以,我正在使用NSXML从头开始构建一个XML文档,当我创建一个带字符串值的NSXMLNode时,该字符串中的所有"<"字符都替换为"<" 当我输出节点,或将其保存到文件.

例:

 NSXMLNode *description = [NSXMLNode elementWithName:@"description"
                               stringValue:@"<![CDATA[Some Description</a>]]>"];
Run Code Online (Sandbox Code Playgroud)

然后当我这样做

 NSLog(@"description: %@", description);
Run Code Online (Sandbox Code Playgroud)

我得到节点,所有'<'字符都替换为"<".但是,当我这样做

 NSLog(@"description string value: %@", [description stringValue]);
Run Code Online (Sandbox Code Playgroud)

我得到正确的字符串输出.这个XML文档将保存为谷歌地球的KML文件,谷歌地球在发现"<"时给我一个错误 令牌.知道如何让NSXML输出'<'?我正在使用OSX 10.6和XCode 3.2顺便说一句.

xml cocoa objective-c nsxml

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

哪个更快?NSXMLParser或KissXML

HI,

我需要一个XML解析器.我想知道哪一个更快?NSXMLParser还是KissXML?

期待回复......

iphone objective-c nsxmlparser nsxml

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

带有"&"(&符号)字符的NSXMLParser问题

我的NSXMLParsing因为"&"字符而无法工作..我的代码在下面.请帮忙吗?

 NSString *myRequestString = [NSString stringWithFormat:@"http://abc.com/def/webservices/aa.php?family_id=%d",self.passFamilyId];
//NSLog(@"Requested Service = %@",myRequestString);
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:myRequestString]];
[request setHTTPMethod: @"POST" ];
NSData *downloadedData = [ NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

NSString *str = [[NSString alloc] initWithData:downloadedData encoding:NSASCIIStringEncoding];
//NSString *contentString = [str stringByReplacingOccurrencesOfString:@"&" withString:@"&amp;"];
NSData * data=[str dataUsingEncoding:NSUTF8StringEncoding];


//NSLog (@"string is :%@" ,str);    

NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithData:data];   

// Call the XMLParsers's initXMLParse method.
ClientDetailXmlParser *parser = (ClientDetailXmlParser*)[[ClientDetailXmlParser alloc] initXMLParser];
[xmlParser setDelegate:parser];
BOOL success = [xmlParser parse];

// Check for XML …
Run Code Online (Sandbox Code Playgroud)

iphone objective-c nsxmlparser nsxml ios

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