【问题标题】:NSXMLParser not adding all objects in iPhone?NSXMLParser 没有在 iPhone 中添加所有对象?
【发布时间】:2023-04-01 07:29:02
【问题描述】:

当我尝试使用 NSXMLParser 解析 XML 文件时,我无法解析所有元素.. XML 响应如下所示:

<AList>
   <Details>
          <AId>1</AId>
          <Date>10/31/2012</Date>
          <Time>11:00 AM</Time>
       <User>
          <Employee>
              <Name>Rosy</Name>
              </Employee>
              <Company>
                  <Customer>
                     <CustName>Williams</CustName>
                     <CustPhone>1232322</CustPhone>
                 </Customer>
             </Company>
       </User>
  </Details>
<Details>
          <AId>2</AId>
          <Date>10/31/2012</Date>
          <Time>11:30 AM</Time>
       <User>
          <Employee>
              <Name>Mary</Name>
              </Employee>
              <Company>
                  <Customer>
                     <CustName>Christopher</CustName>
                     <CustPhone>123233323</CustPhone>
                 </Customer>
             </Company>
       </User>
  </Details>
</AList>

如何获取所有 XML 标签中的所有元素?

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {


if([elementName isEqualToString:@"AList"])
{
    arr=[[NSMutableArray alloc] init];



}
    if([elementName isEqualToString:@"Details"]||[elementName isEqualToString:@"User"])
    {
        drr=[[NSMutableDictionary alloc] init];
    }

srr=[[NSMutableString alloc] init];

} 


-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{


    [srr appendString:string];
}


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

    if([elementName isEqualToString:@"AId"])
    {

        [drr setObject:srr forKey:@"AId"];
        [srr release],srr=nil;
        return;
    }  

    if([elementName isEqualToString:@"Date"])
    {

        [drr setObject:srr forKey:@"Date"];
        [srr release],srr=nil;
       return;    
    }
    if([elementName isEqualToString:@"Time"])
    {

        [drr setObject:srr forKey:@"Time"];
        [srr release],srr=nil;
     return;      
    }
    if([elementName isEqualToString:@"Name"])
    {

        [drr setObject:srr forKey:@"Name"];
        [srr release],srr=nil;
        return;
    }
        if([elementName isEqualToString:@"CustName"])
    {
        [drr setObject:srr forKey:@"CustName"];
        [srr release],srr=nil;


       return;
    }

    if([elementName isEqualToString:@"CustPhone"])
    { 
        [arr addObject:drr]; 

    }    



    if([elementName isEqualToString:@"AList"])
    {

        [drr release];


    }

    [srr release],srr=nil;

}

我不想要 CustPhone...我只能从我编写的代码中获取 CustName。我哪里出错了?

【问题讨论】:

  • 请发布一些与问题相关的代码...
  • 我添加了代码。你能看看,让我知道我哪里出错了..
  • 有什么问题?你有什么元素吗?委托方法是否有效?
  • 我在数组中只得到 CustName。我在结果中的数组是 ({ CustName = Williams; }, { CustName = Christopher; }, )
  • 我只得到数组中的 CustName。我在结果中的数组是 ({ CustName = Williams; }, { CustName = Christopher; }, ) 我没有得到所有元素...

标签: iphone xcode xml-parsing nsxmlparser


【解决方案1】:

您可以参考链接http://wiki.cs.unh.edu/wiki/index.php/Parsing_XML_data_with_NSXMLParser。希望对你有所帮助。

【讨论】:

    【解决方案2】:

    您的 TAG 不同于 - 'L'。否则 NSXMLParser 可以轻松地在 didFoundCharacters 委托中为您正确解析所有其他标签数据。

    这是你在字符串比较中遇到的问题

    - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
    
    if([elementName isEqualToString:@"AList"]) // in ur xml it is Alist
    {
    
        [drr release];
    

    }

    【讨论】:

      【解决方案3】:

      请改一下

          if([elementName isEqualToString:@"Details"]||[elementName isEqualToString:@"User"])
          {
              drr=[[NSMutableDictionary alloc] init];
          }
      

         if([elementName isEqualToString:@"Details"])
          {
              drr=[[NSMutableDictionary alloc] init];
          }
      

      当找到客户电话元素时,您正在将字典添加到数组中。 您正在分配字典两次。当找到“Details”和“User”标签时。

      【讨论】:

      • 当我写你的代码时,我只得到这样的 Name 和 CustName ({ CompanyName = Williams; Name = Rosy; }, { CompanyName = Christopher; Name = Mary; }, ) 我没有得到其他 AId,Date,Time...我应该改变什么?
      • @arizah: 将 NSlog 放入 didEndElement 并打印 srr 的内容。检查输出
      • 我无法得到你。你能简单解释一下吗...我保持这样:NSLog(@"%@",srr);我得到 srr 为 0
      • NSLog(@"%@",srr);' as the first line of didEndElement:`方法。请检查控制台,是否在控制台中显示日期和 AId?
      • 我保留它并通过保留断点来检查它,然后我在控制台中得到它。是的,我在控制台中得到它。但在最后的 arr 我没有得到
      猜你喜欢
      • 2016-11-02
      • 2013-10-04
      • 1970-01-01
      • 2013-06-12
      • 1970-01-01
      • 2011-09-02
      • 2015-11-26
      • 2022-12-17
      • 2010-12-18
      相关资源
      最近更新 更多