0

我使用 NSXMLParser 来解析大型 XML 文件——运行良好但是 :) 我无法让解析器解析来自 DTD 的外部实体。

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

我确实得到了:- (NSData *)parser:(AQXMLParser *)parser resolveExternalEntityName:(NSString *)name systemID:(NSString *)systemID 但我不知道要返回什么...实体是在 DTD 中定义的。 .

如果我能获得 DTD 中条目的以下内容,我将自己构建一个表 - (void)parser:(AQXMLParser *)parser foundInternalEntityDeclarationWithName:(NSString *)name value:(NSString *)value;

不过,NSXMLParser 不应该为我做实体替换吗?不知何故... :)

无论如何,我不知道如何进行


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

4

1 回答 1

2

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

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

于 2009-06-01T09:43:18.660 回答