替换Objective-C中的空XML标记

时间:2011-04-06 02:30:52

标签: objective-c xml

我在接受采访时被问到这个问题,想知道是否有人知道解决这个问题的最佳方法。

我有一个XML字符串,我无法访问整个XML文档,所使用的解析器是一个流解析器(NSXMLParser):

<i><b></b><strong>Test</strong></i>

这必须由

取代
<i><b/><strong>Test</strong></i>

如何使用NSXMLParser在Objective-C中完成?

2 个答案:

答案 0 :(得分:0)

实际上没有“一种”最好的方法,但Apple概述了使用NSXMLParser修改XML文档的一些general guidelines。它没有具体说明并给你一个确切的实现,但它应该在你的某个地方开始。

答案 1 :(得分:0)

我已经解决了,忘了在这里发布答案:

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

content = nil;
content = [[NSMutableString alloc] init];

isEndElement = FALSE;

if([previousElement length] != 0){
    [previousAttribute count] != 0 ? NSLog(@"<%@ %@>", previousElement, [previousAttribute description]) : NSLog(@"<%@>", previousElement);
}

previousElement = elementName;
previousAttribute = attributeDict;

}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{

[content appendString:string];

}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{     

previousElement = @"";

if(isEndElement){
    NSLog(@"</%@>", elementName);
}else{

    if([content length] != 0){
    [previousAttribute count] != 0 ? NSLog(@"<%@ %@>%@</%@>", elementName, [previousAttribute description], content, elementName) : 
                                                                                                    NSLog(@"<%@>%@</%@>", elementName, content, elementName);
    }else{        
        [previousAttribute count] != 0 ? NSLog(@"<%@ %@/>", elementName, [previousAttribute description]) : NSLog(@"<%@/>", elementName);
    }
}

isEndElement = TRUE;

}