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

时间:2010-08-09 16:12:09

标签: objective-c cocoa dtd nsxmlparser

我正在尝试通过NSXMLParser检索XML文档中DTD的公共ID和系统ID。虽然NSXMLParser主要提供publicIDsystemID选择器,但它们似乎对我不起作用。 doctype标记如下所示:

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

这是我的代码(该文件是通过NSFileHandle readDataToEndOfFile打开的:

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:但是没有成功。

任何想法我做错了什么?

1 个答案:

答案 0 :(得分:0)

您可以试用另一个解析器。

http://www.robbiehanson.com/expat.html提供了基于expat的NSXMLParser替代品。

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

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