我正在解析一个简单的 XML 文件,但有时在节点中有包含与号 (&) 的标签。我在这里和这里做了一些研究,但问题仍然存在。问题是解析器在遇到有问题的 XML 元素时会简单地停止。XML 如下所示:
<video>
<video_id>42</video_id>
<video_header>Six & Eight</video_header>
<video_subheader>So Long</video_subheader>
</video>
解析器正在更新一个名为 的对象,该对象DisStep
具有一个parsedVideoArray
属性。该属性只是一个Parsed_Video
对象数组。所以问题是当解析器获取foundCharacters
元素video_header
时它不会继续didEndElement
。实际上,NSLog
foundCharacters 方法中的 ancurrentNodeContent
就是"Six "
.
这是解析器的代码。它所做的只是寻找视频并收集有关它们的信息。
-(void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName
attributes:(NSDictionary *)attributeDict
{
if ([elementName isEqualToString:@"video"])
{
videoBeingParsed = [[Parsed_Video alloc] init];
}
}
-(void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
string = [string stringByReplacingOccurrencesOfString:@"&" withString:@"&"];
currentNodeContent = (NSMutableString *) string;
}
- (void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName
{
if ([elementName isEqualToString:@"video_id"])
{
videoBeingParsed.Video_ID = currentNodeContent;
currentNodeContent = nil;
}
else if ([elementName isEqualToString:@"video_header"])
{
videoBeingParsed.Video_Header = currentNodeContent;
currentNodeContent = nil;
}
else if ([elementName isEqualToString:@"video_subheader"])
{
videoBeingParsed.Video_SubHeader = currentNodeContent;
currentNodeContent = nil;
}
else if ([elementName isEqualToString:@"video"])
{
[DisStep.parsedVideoArray addObject:videoBeingParsed];
currentNodeContent = nil;
videoBeingParsed = nil;
}
}
@end
我试过了,stringByReplacingOccurrencesOfString: withString:
但解析器仍然停止工作。除了更改 XML 之外,还有其他方法吗?