2012-01-02 5 views
3

NSXmlparserでself-closingタグを処理するにはどうしたらいいですか? 開始要素と終了要素がありません - 次の種類のタグを処理することは可能ですか?NSXmlParserで自己終了タグを処理しますか?

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

これであなたは簡単にこれを得ることができます。 – Ron

答えて

5

NSXMLParserを含む任意のXMLパーサーは、これを治療する必要があります。

<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要素のdeletagateメソッドは通常どおり呼び出されますか?チェックしても呼び出されません。 – nameless

+0

本当ですか?私はそれを試していないが、それは 'parser:didEndElement:namespaceURI:qualifiedName:' は終了タグなので、呼び出されるように思えるでしょうか? –

+0

私は、XML 1.0仕様の一部であると考えています。これは、2つのパーサが関連する限り、同じものの別の形式です。私はそれを確認できるかどうか確認します。要素に何らかの属性がある場合、didStartElementを必ず呼び出さなければならないことはわかっています。私はそれが何であっても呼ばれなければ私は驚くだろうが、それを確認するために私が少しかかるだろう。 –

0

これは終了タグであり、NSXMLParser代理人のdidEndElementを呼び出します。

このタグで見つかった文字は空白になります。

は、私は、XMLパーサーをしなければならなかったし、私のタグのいずれかが空だったと自己

スタートとするendElementが働いているすなわち囲むthis.v

+0

は、これを処理するための特別なロジックが必要ないことは間違いありません。見つかった文字が空であると言うのは全く正確ではないかもしれません。このようなXMLの「空要素」構文を使用すると、NSXMLParserDelegateのfoundCharactersコールバックは決して呼び出されません。また、「これは終了タグです」とは正確ではありません。これは、開始タグと終了タグの両方を省略した特殊なXML構文です。 –

0

を処理するための特別なロジックは必要ありません。..

関連する問題