0

簡単なXMLは次のとおりです。

<MSG>
    <ID>123<ID>
    <Node>
       <ID>456<ID>
    </Node>
</MSG>

そして、私はのサブクラスでParentParserあり、実装するパーサーを手に入れましたNSXMLParserDelegate

これParentParserは次のようなものです。

- (id)initWithXmlString:(NSString *)xmlString
{
    if ( (self = [super init]) ) {
        NSString *str = [[NSString alloc] initWithString:xmlString];
        self.xml = str;
        [str release];

        self.storingData     = NO;
        self.receiveString   = [NSMutableString string];
        self.elementsToParse = [NSArray array];
    }

    return self;
}

そして、これが私がXMLを解析する方法です。

- (void)parser:(NSXMLParser *)parser 
 didEndElement:(NSString *)elementName 
  namespaceURI:(NSString *)namespaceURI 
 qualifiedName:(NSString *)qName{

   if (self.m_oMyObject) {
      if (self.storingData) {
         NSString *tempStr = [self.receiveString stringByTrimmingCharactersInSet:
                              [NSCharacterSet whitespaceAndNewlineCharacterSet]];
         [self.receiveString setString:@""];

         if ([elementName isEqualToString:kID]) {
             //Go in twice
         }
     //============ Code skips ===================

ご覧のとおりkID、StringIDは2回解析されていました。しかし、タグ内にある、123ではなく、唯一のものが欲しいのですが、どうすれば修正できますか?ありがとう。456<Node>

4

1 に答える 1

1

ネストされた要素をスキップすることはできないと思いますが、でインスタンス変数をインクリメントし、でデクリメントすることでNSXMLParser、現在のレベルを追跡できます。levelparser:didStartElement:...parser:didEndElement:...

于 2012-08-17T04:57:59.267 に答える