使用NSXMLParser用节点内的html解析xml

时间:2015-03-06 09:21:58

标签: objective-c xml xcode parsing

我正在尝试读取带有内部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]];
    }

}

1 个答案:

答案 0 :(得分:2)

在CDATA块中包装xml元素的内容 - 这样解析器就不会将其视为xml并跳过它。 (不要把它与PCDATA混淆!解析的CDATA不会有帮助,但CDATA本身应该可以做到这一点)

然后您可以使用第二个解析器来解析内部html&#39;

相关问题