4

現在、外部の解析済みエンティティ参照を使用して、別の XML を含む XML を解析しようとしています。ただし、NSXMLParser は、含まれている XML を解析する代わりにエラーをスローします。

xml は次のようになります。

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE parentElement[
<!ENTITY extern SYSTEM "myGreatURI">
]>

<parentElement
    attribute1="1" 
    attribute2="2" 
    ...>
    <childElement>

        &extern;

        <parentElement
        ..>
            <childElement>

パーサーが外部参照を解析できるようにしました。

self.parser.shouldResolveExternalEntities = TRUE;

外部エンティティの定義が解析されると、それに応じたデリゲート メソッドが呼び出されます。

- (void)parser:(NSXMLParser *)parser foundExternalEntityDeclarationWithName:(NSString *)entityName publicID:(NSString *)publicID systemID:(NSString *)systemID

正しい値を渡します: entityName = "extern" および systemID = "myGreatURI"

しかし、xml で参照が解析されると、NSXMLParser エラー1549が発生します。


このエラーが発生した後でのみ、予期されるデリゲート メソッドが呼び出されます。

- (NSData *)parser:(NSXMLParser *)parser resolveExternalEntityName:(NSString *)entityName systemID:(NSString *)systemID 

しかし今、systemID はnilです! さらに、NSXMLParser は返されたデータを期待どおりに使用しません。解析する代わりに、完全な XML が 1 つの文字列として検出され、メソッドを通じて渡されます。

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string

ご覧のとおり、私にはいくつかの異なる問題があります。残念ながら、Google と Apple のドキュメンテーションは、私に無知なままでした。

4

1 に答える 1