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 に答える