Cocoa:NSXMLParser - 如何解析DTD中定义的实体

时间:2009-06-01 08:52:09

标签: cocoa nsxmlparser

我使用NSXMLParser来解析大型XML文件 - 很好但是:) 我无法让解析器从DTD解析外部实体。

我用谷歌搜索文档和旧邮件... 我确实设置了parser.shouldResolveExternalEntities = YES

我得到: - (NSData *)解析器:(AQXMLParser *)解析器resolveExternalEntityName:(NSString *)name systemID:(NSString *)systemID 但我不知道该返回什么... 实体在DTD中定义......

如果我能够获得DTD中的条目,我会自己构建一个表 - (void)parser:(AQXMLParser *)解析器foundInternalEntityDeclarationWithName:(NSString *)name value:(NSString *)value;

但是,NSXMLParser不应该为我做实体替换吗? 不知怎的...... :)

在任何情况下,我都不知道如何继续


交叉发布@ cocoa-dev@lists.apple.com

1 个答案:

答案 0 :(得分:2)

由于DTD中的URI不一定指向引用对象或实体的实际位置,因此委托方法的作用是解析外部实体:

在解析器中:resolveExternalEntityName:systemID:
使用NSXMLDTD加载外部DTD(systemID)和
使用NSXMLDTD返回的NSXMLDTDNode对象:entityDeclarationForName:entityName来解析实体