如何使用NSXMLParser获取DTD的公共和系统ID
问题描述:
我试图通过NSXMLParser
检索XML文档中DTD的公共和系统ID。虽然NSXMLParser
主要提供publicID
和systemID
选择器,他们似乎并不适合我。 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">
这里是我的代码(该文件是通过打开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:
但没有成功。
任何想法我做错了吗?
答
你可以尝试另一种解析器。
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