NSXMLParser没有在iPhone中添加所有对象?

时间:2012-10-31 09:53:36

标签: iphone xcode xml-parsing nsxmlparser

当我尝试使用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。我哪里出错?

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

你的&lt; / ALIST&GT; TAG与&lt;不同。 ALIST&GT; - '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];

}

答案 2 :(得分:0)

请更改此

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

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

找到客户电话元素时,您将字典添加到数组中。 您正在分配字典两次。找到“详细信息”和“用户”标记时。