如何使用NSXMLParser获取DTD的公共和系统ID

如何使用NSXMLParser获取DTD的公共和系统ID

问题描述:

我试图通过NSXMLParser检索XML文档中DTD的公共和系统ID。虽然NSXMLParser主要提供publicIDsystemID选择器,他们似乎并不适合我。 DOCTYPE标签是这样的:如何使用NSXMLParser获取DTD的公共和系统ID

<!DOCTYPE Article PUBLIC "-//SoftQuad Software//DTD Journalist v2.0 20000501//EN" "file:///C:/Program%20Files/Corel/XMetaL%204/Author/Rules/journalist.dtd"> 

这里是我的代码(该文件是通过打开NSFileHandlereadDataToEndOfFile

NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data]; 
[parser setDelegate:self]; 
BOOL parseSuccessful = [parser parse]; 

在代理的parserDidStartDocument:我尝试访问的ID:

NSLog(@"%@ : %@", [parser publicID], [parser systemID]); 

但我只看到

(null) : (null) 

从文档:

一次解析操作已开始或发生错误后,您可以调用此方法。

所以我想这应该在parserDidStartDocument:已经工作,但我想调用不同的委托方法这些选择(如parser:didStartElement:namespaceURI:qualifiedName:attributes:但没有成功。

任何想法我做错了吗?

你可以尝试另一种解析器。

http://www.robbiehanson.com/expat.html提供基于外籍人士的的NSXMLParser一个简易替换。

您可能还会发现这篇文章比较有趣,比较了iPhone上各种XML解析器的性能。

http://www.raywenderlich.com/553/how-to-chose-the-best-xml-parser-for-your-iphone-project