2012-01-02 62 views
3

我們如何才能在NSXmlparser中處理自閉標籤?沒有 開始元素和結束元素 - 是否可以處理以下類型的標籤?在NSXmlParser中處理自閉標籤?

<ITEM NAME/> 
<REG Number/> 
+0

使用TbXml解析在這你很容易得到這一個 – Ron 2012-01-02 04:19:17

回答

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回調,這就是它應該如何工作的。

+0

parserdidstart和parserdidend元素deleagate方法將被調用爲通常?我檢查過,它不叫.. – nameless 2012-01-02 04:01:54

+0

你確定嗎?我還沒有嘗試過,但它似乎只有'parser:didEndElement:namespaceURI:qualifiedName:'將被調用,因爲''是一個結束標記,對吧? – 2012-01-02 04:05:02

+0

我相信它是XML 1.0規範的一部分,就任何解析器而言,它們是相同事物的替代形式。我會看看我能否證實這一點。我知道,如果元素具有任何屬性,則必須確保didStartElement被調用。如果不被稱爲不管是什麼,我都會感到驚訝,但是這需要我來驗證一下。 – 2012-01-02 04:09:20

0

這是結束標記,它將調用NSXMLParser委託人的didEndElement

該標記的發現字符將爲空。

無需任何特殊的邏輯來處理this.v

+0

是正確的,不需要任何特殊的邏輯來處理這個問題。說出找到的人物是空的可能並不完全準確。當使用XML這樣的「空元素」語法時,NSXMLParserDelegate的foundCharacters回調將永遠不會被調用。另外,說「這是結束標記」並不準確 - 這是特殊的XML語法,它既是開始標記又是結束標記的縮寫。 – 2012-01-02 04:40:37

0

我不得不做出一個XML解析器和我的標籤之一是空的,自我封閉,即

開始和endElement正在..