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

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发生。


仅在出现此错误后,才调用预期的delegate方法:

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

但现在systemID是nil!此外,NSXMLParser没有按预期使用我的返回数据进行解析。它不是解析它,而是将完整的XML检测为一个字符串,并通过该方法传递给我:

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

您可以看到我有几个不同的问题。不幸的是,谷歌和苹果文档让我毫无头绪。

1个回答

0
据我所了解,NSXMLParser在resolveExternalEntityName中始终返回systemID = nil,因为当它到达这里时,systemID资源应该已经被加载,如果未能检索到它,则意味着systemID无效或其他原因,因此它将是无用的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接