在NSXmlParser中处理自闭标签?

nam*_*ess 3 xml ios

我们怎样才能在NSXmlparser中处理自动关闭标签?没有起始元素和结束元素 - 是否可以处理以下类型的标记?

<ITEM NAME/>
<REG Number/>
Run Code Online (Sandbox Code Playgroud)

Tim*_*ean 5

任何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回调,这就是它应该如何工作.