【发布时间】:2015-05-07 20:59:21
【问题描述】:
我正在尝试读取带有内部 html 的 xml 文件以显示在 UIWebView 中。
我正在使用 NSXMLParser 解析传入的 XML 文件。像魅力一样工作。但是现在我想解析标签中包含的 HTML。
例如,解析得很好:
<item>
<letter>a</letter>
<word>word 1</word>
<description>Yada yada</description>
</item>
但是这会导致解析器崩溃:
<item>
<letter>a</letter>
<word>word 1</word>
<description><p>Yada</p></description>
</item>
因为解析器认为它应该翻译
显然是 xml 节点。
如何更改解析以处理内部 html?
我的类中用于解析 xml 的代码在方法 foundCharacters 上处理这些节点
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
// save the characters for the current item...
if ([currentElement isEqualToString:@"letter"]) {
[currentLetter appendString:string];
} else if ([currentElement isEqualToString:@"word"]) {
[currentWord appendString:string];
} else if ([currentElement isEqualToString:@"description"]) {
[currentDescription appendString:string];
}
}
这在 didEndElement 上
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
if ([elementName isEqualToString:@"item"]) {
// save values to an item, then store that item into the array...
[item setObject:currentLetter forKey:@"letter"];
[item setObject:currentWord forKey:@"word"];
[item setObject:currentDescription forKey:@"description"];
[stories addObject:[item copy]];
}
}
【问题讨论】:
-
“我怎样才能改变我的解析”——我们如何判断你是否没有显示任何解析代码?您如何定义“内部 HTML”?第二个例子是有效的 XML。
-
@MartinR 查看我编辑的笔记。我不希望解析器将
作为 xml 节点处理,但它确实:)
-
据我所知,没有办法让 NSXMLParser 跳过解析并将某些 XML 元素视为“普通文本”。
-
@MartinR CDATA 块不会这样做吗?
-
@JoakimM:这些信息在您的问题中也很有用:)
标签: objective-c xml xcode parsing