iphone:的NSXMLParser无法识别HTML特殊实体&

问题描述:

我根本无法获得的NSXMLParser承认&iphone:的NSXMLParser无法识别HTML特殊实体&

这里是我的XML:

<?xml version="1.1" encoding="UTF-8"?> 
<root> 
    <myURL>http://www.mywebsite.com/info?id=32&amp;page=5</myURL>> 
</root> 

这里是我的解析代码:

-(void)getXml { 
NSURL *xmlurl = [[NSURL alloc] initWithString:@"http://www.mywebsite.com/myxml.xml"]; 
NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:xmlurl]; 
[xmlParser setDelegate:self]; 
[xmlParser parse]; 
[xmlParser release]; 
[dataurl release]; 
} 

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

NSLog(@"Parser Error: %@", parseError); 

} 

- (void)parser:(NSXMLParser *)parser validationErrorOccurred:(NSError *)validError { 

NSLog(@"Parser validation Error: %@", validError); 


} 


- (void)parserDidStartDocument:(NSXMLParser *)parser { 

NSLog(@"Parser started"); 


} 

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

NSLog(@"Found key: %@", elementName); 


} 

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

NSLog(@"Found Element: %@", string); 


} 


- (void)parserDidEndDocument:(NSXMLParser *)parser { 

NSLog("done"): 

} 

这是我的输出:

Found key: root 
Found key: myURL 
Found element: http://www.mywebsite.com/info?id=32 
Found element: page=5 
Found element: 
Found key: myURL 

解析器不能正确识别&并正在拆分我的网址。 我在这个问题上看过很多Stack问题,但没有一个帮助过,我也阅读了NSXMLParser上的Apple文档。我在这里错过了什么吗?

我与iOS 5.0建设到iPhone 4

按照NSXMLParserDelegate documentation

解析器对象可以发送委托几个 解析器:foundCharacters:消息,报告的 人物元件。因为字符串可能只是当前元素的总字符内容的一部分,所以您应该将其附加到字符当前的 堆积中,直到元素更改。

所以使用通常的模式是保持附加到一个临时字符串,直至到达元素的末尾:

.H

@property (nonatomic,retain) NSMutableString *tempString; 

.M

@synthesize tempString; 

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict 
{ 
    self.tempString = @""; 
} 

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
{ 
    [self.tempString appendString:string]; 
} 

- (void)parserDidEndDocument:(NSXMLParser *)parser 
{ 
    // do something with self.tempString 
} 
+0

是的!谢谢一个包:) – Zigglzworth 2012-02-15 21:34:22

谢谢,这是对解析器过程的深入了解,但是使用它有问题,可能是由于Xcode 4.5.1的功能

事实证明,将一个NSString像@“”分配给一个NSMutableString使它不可变。相反,设定初始值的tempString我不得不使用

self.tempString = [[NSMutableString alloc] initWithString: @""]; 

和解析器:foundCharacters方法变得

- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
{ 
[self.tempString appendString:string]; 
currentNodeContent = (NSMutableString*) [self.tempString stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]]; 
} 

但这是一个问题解决了。谢谢。

+0

什么是currentNodeContent? – 2013-02-15 21:26:03