首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSXMLParser未解析内部实体

NSXMLParser未解析内部实体
EN

Stack Overflow用户
提问于 2014-02-15 00:12:05
回答 1查看 297关注 0票数 5

我有一个声明内部实体n的XML

代码语言:javascript
复制
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来解析它

代码语言:javascript
复制
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:[xmlString dataUsingEncoding:NSUTF8StringEncoding]];
[parser setDelegate:self];
[parser parse];

并且我实现了委托方法

代码语言:javascript
复制
- (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;不会被解析。简单的空白。我做错什么了?

解析的输出:

代码语言:javascript
复制
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>
EN

回答 1

Stack Overflow用户

发布于 2014-03-17 00:59:18

实体定义的值(“名词”)周围有反斜杠"\“的原因吗?

代码语言:javascript
复制
<!ENTITY n \"noun\">]

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

代码语言:javascript
复制
<!ENTITY entity-name "entity-value">

删除“名词”周围的反斜杠,然后重试。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21784131

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档