NSXMLParser无法解析内部实体 [英] NSXMLParser not resolving internal entity

查看:163
本文介绍了NSXMLParser无法解析内部实体的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这个XML,它声明了内部实体n

I have this XML which declares internal entity n

NSString *xmlString = @"<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<!DOCTYPE JMdict [<!ENTITY n \"noun\">]>
    <JMdict>
         <entry>
             <sense>
                 <pos>&n;</pos>
                 <gloss>love</gloss>
             </sense>
         </entry>
    </JMdict>";

并使用NSXMLParser进行解析

NSXMLParser *parser = [[NSXMLParser alloc] initWithData:[xmlString dataUsingEncoding:NSUTF8StringEncoding]];
[parser setDelegate:self];
[parser parse];

我实现了委托方法

- (void)parser:(NSXMLParser *)parser foundInternalEntityDeclarationWithName:(NSString *)name value:(NSString *)value {
    NSLog(@"foundInternalEntityDeclarationWithName: %@ = %@", name, value);
}

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
    NSLog(@"<%@>", elementName);
}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
    NSLog(@"</%@>", elementName);
}

- (void)parser:(NSXMLParser *)parser didStartMappingPrefix:(NSString *)prefix toURI:(NSString *)namespaceURI {
    NSLog(@"didStartMappingPrefix %@ %@", prefix, namespaceURI);
}

- (void)parser:(NSXMLParser *)parser didEndMappingPrefix:(NSString *)prefix {
    NSLog(@"didEndMappingPrefix %@", prefix);
}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
    NSLog(@"\t%@", string);
}

- (void)parser:(NSXMLParser *)parser foundIgnorableWhitespace:(NSString *)whitespaceString {
    NSLog(@"foundIgnorableWhitespace %@", whitespaceString);
}

- (void)parser:(NSXMLParser *)parser foundProcessingInstructionWithTarget:(NSString *)target data:(NSString *)data {
    NSLog(@"foundProcessingInstructionWithTarget %@", target);
}

- (void)parser:(NSXMLParser *)parser foundComment:(NSString *)comment {
    NSLog(@"foundComment %@", comment);
}

- (void)parser:(NSXMLParser *)parser foundCDATA:(NSData *)CDATABlock {
    NSLog(@"foundCDATA");
}

- (NSData *)parser:(NSXMLParser *)parser resolveExternalEntityName:(NSString *)name systemID:(NSString *)systemID {
    NSLog(@"resolveExternalEntityName %@ %@", name, systemID);
    return nil;
}

- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError {
    NSLog(@"Error %@", parseError);
}

但是&n;无法解析.只是空白.我做错了什么?

However &n; is not resolved. Simply blank. What did I do wrong?

分析的输出:

2014-02-15 01:09:16.579 TestNSXMLParser[76939:303] foundInternalEntityDeclarationWithName: n = noun
2014-02-15 01:09:16.580 TestNSXMLParser[76939:303] <JMdict>
2014-02-15 01:09:16.581 TestNSXMLParser[76939:303] <entry>
2014-02-15 01:09:16.581 TestNSXMLParser[76939:303] <sense>
2014-02-15 01:09:16.582 TestNSXMLParser[76939:303] <pos>
2014-02-15 01:09:16.582 TestNSXMLParser[76939:303] </pos>
2014-02-15 01:09:16.582 TestNSXMLParser[76939:303] <gloss>
2014-02-15 01:09:16.583 TestNSXMLParser[76939:303]  love
2014-02-15 01:09:16.583 TestNSXMLParser[76939:303] </gloss>
2014-02-15 01:09:16.583 TestNSXMLParser[76939:303] </sense>
2014-02-15 01:09:16.584 TestNSXMLParser[76939:303] </entry>
2014-02-15 01:09:16.584 TestNSXMLParser[76939:303] </JMdict>

推荐答案

是什么原因使您在实体定义的值(名词")周围加上反斜杠"\"?

Any reason you have a backslash "\" around the value ("noun") of your entity definition?

<!ENTITY n \"noun\">]

内部实体声明的XML语法如下:

The XML syntax for internal entity declaration is as the following:

<!ENTITY entity-name "entity-value">

从名词"附近删除反斜杠,然后重试.

Remove the backslash from around "noun" and try again.

这篇关于NSXMLParser无法解析内部实体的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆