首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用NSXMLParser解析xml

使用NSXMLParser解析xml
EN

Stack Overflow用户
提问于 2011-03-19 20:25:09
回答 2查看 1.4K关注 0票数 0

我正在尝试使用NSXMLParser解析xml文件。我的NSXMLParserDelegate实现了parser:didStartElementparser:didEndElement,它从解析器获取每个元素的消息。但是,当我尝试打印它们时,我发现消息是空的。我遗漏了什么?

我的代表:

代码语言:javascript
复制
@interface ExtensionXML : NSObject <NSXMLParserDelegate> {
    @private NSXMLParser* xmlParser;
    @private NSURL*       fileUrl;
}
- (void) parse;           
- (ExtensionXML*) initWithPath: (NSString*)path;
@end

@implementation ExtensionXML
- (ExtensionXML*) initWithPath: (NSString*)path
{
     if (self = [super init])
     {
         fileUrl = [NSURL fileURLWithPath:[path  stringByExpandingTildeInPath]]; // error handling
     }
    return self;
}

- (void) parse
{
   xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:fileUrl];
   [xmlParser setDelegate:self];
   [xmlParser setShouldResolveExternalEntities:YES];
   [xmlParser setShouldProcessNamespaces:YES];
   [xmlParser setShouldReportNamespacePrefixes:YES];
   [xmlParser parse];
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict
{
    NSLog(@"start: element %s uri %s qualified name %s", elementName, namespaceURI, qualifiedName);
}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict
{
    NSLog(@"end: element %s uri %s qualified name %s", elementName, namespaceURI, qualifiedName);
}
@end 

xml文件是:

代码语言:javascript
复制
<someroot xmlns="http://ns.mycompany.com/product/format/1.3">
    <id>myid</id>
    <version>1</version>
    <components>
        <component name="componentOne">
                <initializer>Init0</initializer>
        </component>
    </components>
</someroot>

NSLog的输出显示elementName、namespaceURI和qualifiesName都为空。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-19 21:52:27

要记录NSStrings,请使用%@而不是%s。更改两个NSLog行。有关说明符及其用法的列表,请参阅String Format Specifiers

另一个问题是didEndElement委托方法没有attributes参数,因此您编写的方法不会被调用。它应该是:

代码语言:javascript
复制
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName 
    namespaceURI:(NSString *)namespaceURI 
    qualifiedName:(NSString *)qualifiedName
{
    NSLog(@"end: element %@ uri %@ qualified name %@", 
                elementName, namespaceURI, qualifiedName);
}
票数 0
EN

Stack Overflow用户

发布于 2013-01-29 13:33:58

代码语言:javascript
复制
Try to compare with element name and get the results like the following

if([elementName isEqualToString:@"component"])
{
 //print something related to xml data
}

Use %@ instead of %s for printing.
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5362038

复制
相关文章

相似问题

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