NSXMLParser:尝试解析和解析外部实体时出错

时间:2012-08-16 16:03:02

标签: ios xml nsxmlparser

我目前正在尝试使用外部解析的权限引用来解析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被检测为一个String,通过以下方法传递给我:

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

如您所见,我有几个不同的问题。不幸的是谷歌和Apple文档让我一无所知。

1 个答案:

答案 0 :(得分:0)

据我所知, NSXMLParser在resolveExternalEntityName中总是返回systemID=nil,因为到这里的时候,systemID资源应该已经加载好了,如果检索失败,就说明systemID无效什么的,反正也没用。