我们怎样才能在NSXmlparser中处理自动关闭标签?没有起始元素和结束元素 - 是否可以处理以下类型的标记?
<ITEM NAME/>
<REG Number/>
Run Code Online (Sandbox Code Playgroud)
任何XML解析器,包括NSXMLParser,都应该对此进行处理:
<ITEMNAME/>
Run Code Online (Sandbox Code Playgroud)
与此XML完全相同:
<ITEMNAME></ITEMNAME>
Run Code Online (Sandbox Code Playgroud)
换句话说,就您编写的解析器代码而言,您应该看到解析器调用元素回调的开始和结束.为了证明这一点,我将以下示例XML放在一个文件中:
<top>
<sample1/>
<sample2 attr1="a"/>
</top>
Run Code Online (Sandbox Code Playgroud)
然后,我实现了以下代码来加载此文件并解析它:
NSURL *sampleURL = [[NSBundle mainBundle] URLForResource:@"sample" withExtension:@"xml"];
NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:sampleURL];
[parser setDelegate:self];
[parser parse];
Run Code Online (Sandbox Code Playgroud)
我的解析器委托方法实现如下:
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI: (NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
NSLog(@"Received didStartElement callback for tag: %@", elementName);
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
NSLog(@"Received didEndElement callback for tag: %@", elementName);
}
Run Code Online (Sandbox Code Playgroud)
当我运行此代码时,我看到以下控制台输出:
2012-01-01 22:24:24.011 SampleXML[10248:707] Received didStartElement callback for tag: top
2012-01-01 22:24:24.012 SampleXML[10248:707] Received didStartElement callback for tag: sample1
2012-01-01 22:24:24.013 SampleXML[10248:707] Received didEndElement callback for tag: sample1
2012-01-01 22:24:24.013 SampleXML[10248:707] Received didStartElement callback for tag: sample2
2012-01-01 22:24:24.015 SampleXML[10248:707] Received didEndElement callback for tag: sample2
2012-01-01 22:24:24.015 SampleXML[10248:707] Received didEndElement callback for tag: top
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我为sample1和sample2标记都获得了didStartElement和didEndElement回调,这就是它应该如何工作.
归档时间: |
|
查看次数: |
1409 次 |
最近记录: |