ios - 由于内容中的换行导致 xml 解析不准确

标签 ios iphone objective-c xml nsxmlparser

我正在尝试使用 NSXMLParser 解析 XML,但由于我拥有的一些 xml 包含换行符 (),所以我的解析不准确。例如,“真正的领导者不是
寻求共识的人
而是共识的缔造者”被解析为“共识的缔造者”不仅
标签搞砸了,逗号也搞砸了之后但似乎搞砸了,猜测是因为紧挨着 br 标签没有空格。任何人都有如何解决这个问题的经验?许多使用 Stackoverflow 的人似乎都有同样的问题,但我一直无法找到适用于 iOS 的解决方案。

在 xml 中,br 标签打印如下:

<br>

这是我正在解析的xml

<entry>
<title>Quote</title>
<content>A genuine leader is not a&lt;br&gt;
searcher for consensus&lt;br&gt;
but, a molder of consensus</content>
</entry>

这是我的xml解析代码

- (void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{   
    if ([elementname isEqualToString:@"entry"])
    {
        currentQuote = [[SQuote alloc] init];
    }

}

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

    if ([elementname isEqualToString:@"content"]){
        currentQuote.content = currentNodeContent;
    }

    if ([elementname isEqualToString:@"entry"])
    {
        [self.popularEntries addObject:currentQuote];
        currentQuote = nil;
        currentNodeContent = nil;
    }
}

编辑:

我尝试将我的 charactersFound 代码更改为以下内容:

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


    if (currentNodeContent == nil)
        currentNodeContent = [[NSMutableString alloc] initWithCapacity: 20];

    [currentNodeContent appendString: [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]];

}

但我仍然收到一个错误,提示“尝试使用 appendString 改变不可变对象(immutable对象):”即使 currentNodeContent 的类型为 NSMutableString

最佳答案

没有详细查看您的代码,但您应该知道 SAX 解析器不保证所有连续代码都将作为单个 characters() 调用传递。实体引用,如您的
,是一个典型的案例,其中许多/大多数解析器将在它们之前传递文本作为一个 characters() 调用,实体的扩展作为另一个,然后文本作为第三个。

您的应用程序有责任从连续的 characters() 调用中累积数据,直到出现非 characters() 事件。

(这与 SAX 事件传递的效率和解析器缓冲区管理等有关,但除非您正在编写解析器,否则您只需要知道前面的句子即可。)

任何好的 SAX 教程都应该说明执行此操作的方法。

(DOM 可能会出现类似的问题,如果解析器被告知要保留实体边界,或者如果文档在第一次被解析后已经被编辑过。应用程序应该准备好连续找到几个文本节点作为兄弟节点,除非众所周知,DOM 是标准化形式。)

关于ios - 由于内容中的换行导致 xml 解析不准确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20562606/

相关文章:

objective-c - Xcode 6.4 挂起 "Timed out waiting to acquire lock file for module ' AVFoundation'"for Release 配置

iOS psd 到 xcode

ios - Swift 中没有项目时的 View 而不是 Tableview

ios - iphone objective-c 以编程方式创建标签

ios - 将 nsstring 转换成 pdf 格式然后发送邮件

ios - 旧数据排序完美,但如果我添加新数据,则降序不正确

ios - 无法注册推送通知

ios - 如何从第二个 View Controller 添加标签栏 Controller

iphone - 有模拟时钟的 iPhone 代码示例吗?

objective-c - 以编程方式发送 PayPal 付款 Objective C