【问题标题】:IOS Parsing XML with multiple tags of the same name under different parentsIOS解析不同父级下多个同名标签的XML
【发布时间】:2012-12-18 03:42:49
【问题描述】:

我有一个要使用 NSXMLPARSER 解析的 XML 文件。 xml 的结构如下:

<report>
   <Page1>
     <row>
      <company>
           <val>
             company 1
           </val>
        </company>
        <TIME1>
           <val>
              time 1
           </val>
        </TIME1>
        <document>
           <val>
            document 1
           </val>
        </document>
     </row>
      <row>
        <company>
           <val>
             company 2
           </val>
        </company>
        <TIME1>
           <val>
              time 2
           </val>
        </TIME1>
        <document>
           <val>
            document 2
           </val>
        </document>
     </row>
   </Page1>
</report>

其中 val 是我要为公司和文档检索为两个单独项目的值。

我可以像这样使用 NSXMLPARSER 成功解析公司的 val:

- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
currentNodeContent2 = (NSMutableString *) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; }


- (void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
if ([elementname isEqualToString:@"Company"])
    {
        currentRfp = [rfp alloc];
        isStatus = YES;
    }
    if ([elementname isEqualToString:@"TIME1"])
    {
        isStatus = NO;
    }
}


- (void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
    if (isStatus        )
    {

        if ([elementname isEqualToString:@"val"])
        {
            currentRfp.content2 = currentNodeContent2;
        }
        if ([elementname isEqualToString:@"val"])
        {
            currentRfp.dateCreated2 = currentNodeContent2;
        }


    }
    if ([elementname isEqualToString:@"row"])
    {
        [self.rfps addObject:currentRfp];
        currentRfp = nil;
        currentNodeContent2 = nil;
    }

}

- (void) parser:(NSXMLParser *)parser foundCharacters2:(NSString *)string
{
    currentNodeContent2 = (NSMutableString *) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
}

我只是在学习,可能有一个简单的答案,但我被卡住了

【问题讨论】:

    标签: ios xml-parsing


    【解决方案1】:

    您可以使用以下代码来执行此操作:

    - (void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
    {
       if ([elementname isEqualToString:@"row"])
        {
            currentRfp = [rfp alloc];
        }
        currentNodeContent2  = [[NSMutableString alloc] init];
    }
    
    - (void) parser:(NSXMLParser *)parser foundCharacters2:(NSString *)string
    {
        currentNodeContent2 = (NSMutableString *) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
    }
    
    - (void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
    {
        if ([elementname isEqualToString:@"val"])
        {
             return;
        }
        if ([elementname isEqualToString:@"TIME1"])
        {
            //you get val of time1 here
        }
        if ([elementname isEqualToString:@"company"])
        {
            //you get val of company here
        }
        if ([elementname isEqualToString:@"document"])
        {
            //you get val of document here
        }
        if ([elementname isEqualToString:@"row"])
        {
            [self.rfps addObject:currentRfp];
            currentRfp = nil;
        }
        [currentNodeContent2 release];
        currentNodeContent2 = nil;
    }
    

    【讨论】:

    • 感谢您的快速回复。我试过这个,当我运行应用程序并访问视图时,我现在得到了 EXC_BAD_ACCESS。有什么想法吗?
    • 原来每个标签(公司、文档、时间 1)都有另一个子名称 text 所以 prser 只是返回单词 tect
    • @BobbyCloutier:设置断点并检查崩溃的位置。
    • 我需要删除另一个版本。
    • 我尝试过你的方法,但没有成功,最后找到了另一个类似的帖子,效果很好link
    猜你喜欢
    • 1970-01-01
    • 2015-03-10
    • 1970-01-01
    • 2014-08-06
    • 1970-01-01
    • 2011-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多