在NSXmlParser中处理自闭标签?

时间:2012-01-02 03:45:25

标签: ios xml

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

<ITEM NAME/>
<REG Number/>

3 个答案:

答案 0 :(得分:5)

任何XML解析器,包括NSXMLParser,都应该对此进行处理:

<ITEMNAME/>

与此XML相同:

<ITEMNAME></ITEMNAME>

换句话说,就编写的解析器代码而言,您应该看到解析器调用元素回调的开始和结束。为了证明这一点,我将以下示例XML放在一个文件中:

<top>
    <sample1/>
    <sample2 attr1="a"/>
</top>

然后,我实现了以下代码来加载此文件并解析它:

NSURL *sampleURL = [[NSBundle mainBundle] URLForResource:@"sample" withExtension:@"xml"];
NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:sampleURL];
[parser setDelegate:self];
[parser parse];

我的解析器委托方法实现如下:

- (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);
}

当我运行此代码时,我看到了以下控制台输出:

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

正如您所看到的,我为sample1和sample2标记都获得了didStartElement和didEndElement回调,这就是它应该如何工作。

答案 1 :(得分:0)

这是结束标记,它将调用didEndElement代理的NSXMLParser

此标记的已找到字符将为空。

无需任何特殊逻辑来处理this.v

答案 2 :(得分:0)

我必须制作一个xml解析器,其中一个标签是空的并且自我封闭即

开始和努力工作......