ios - iOS在不同的父项下解析具有相同名称的多个标签的XML

标签 ios xml-parsing

我有一个XML文件,我正在尝试使用NSXMLPARSER进行解析。 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]];
}

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

最佳答案

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

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

关于ios - iOS在不同的父项下解析具有相同名称的多个标签的XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14144659/

相关文章:

ios - Objective-C:预期类型错误

ios - 如何使用传输实用程序从 S3 下载大量文件?

java - 使用哪个 Java XML 解析器?

ios - 子类化时出现 "duplicate symbols for architecture"错误

javascript - 在 iOS8 Safari 中,只读输入处理不正确

java - 将 XML 解析为 JSON

jakarta-ee - 解析 XSL 文件时出错

xml - python etree.ElementTree 解析困难的命名空间

ios - 错误消息: Thread 1: EXC_BAD_ACCESS (code=2, address=0x7ffeead03e18)

go - Go 中的解码返回空白输出