Iphone 如何读取XML并在标签上显示数据?

Iphone 如何读取XML并在标签上显示数据?,iphone,objective-c,xcode,ipad,ios5,Iphone,Objective C,Xcode,Ipad,Ios5,我有一个XML <?xml version="1.0" encoding="UTF-8"?> <drivers> <driver> <img><![CDATA[45djx96.jpg]]></img> <name><![CDATA[Alonso]]></name> <teamname><![CDATA[farari]]></teamname> <

我有一个XML

<?xml version="1.0" encoding="UTF-8"?>
<drivers>

<driver>
<img><![CDATA[45djx96.jpg]]></img>
<name><![CDATA[Alonso]]></name>
<teamname><![CDATA[farari]]></teamname>
<ref><![CDATA[45djx96]]></ref>
</driver>

<driver>
<img><![CDATA[1236.jpg]]></img>
<name><![CDATA[Alonso2]]></name>
<teamname><![CDATA[farari2]]></teamname>
<ref><![CDATA[1236]]></ref>
</driver>

<driver>
<img><![CDATA[1245FGt.jpg]]></img>
<name><![CDATA[Alonso3]]></name>
<teamname><![CDATA[farari3]]></teamname>
<ref><![CDATA[1245FGt]]></ref>
</driver>

</drivers>

我想展示唯一的细节

指UILable上的1236,s名称和团队名称

我第一次使用webservice。我成功地在控制台上捕获了XML,但无法读取XML并在UILable上显示名称和团队名称的值

现在xml显示在控制台上,但无法解析

有什么想法吗


提前感谢。

使用
TouchXML
您可以将此数据解析为数组,也可以将单个记录解析为字符串。我只是发布了一些关于它的代码

CXMLDocument *doc = [[[CXMLDocument alloc] initWithData:data options:0 error:nil] autorelease];
NSArray *nodes = [doc nodesForXPath:@"//driver" error:nil];

for (CXMLElement *node in nodes) {      
    // Create Object Of Bean Class. if required

    for(int counter = 0; counter < [node childCount]; counter++) {          
        //Save Data in The Bean Class and Add In the Array.

        if ([[[node childAtIndex:counter] name] isEqualToString:@"teamname"]) {                 
            NSString *string = [[node childAtIndex:counter] stringValue];
                            yourLable.Text = string;
            //                NSLog(@"\n\n Title %@",string);

        }
        else if ([[[node childAtIndex:counter] name] isEqualToString:@"ref"]) {                 
            NSString *string = [[node childAtIndex:counter] stringValue];
           //                NSLog(@"\n\n Ref %@",string);
        } 
}
CXMLDocument*doc=[[CXMLDocument alloc]initWithData:data选项:0错误:无]自动释放];
NSArray*节点=[doc nodesForXPath:@//driver”错误:nil];
对于(节点中的CXMLElement*节点){
//创建Bean类的对象。如果需要
对于(int counter=0;计数器<[node childCount];计数器++){
//将数据保存在Bean类中并添加到数组中。
如果([[[node childAtIndex:counter]name]isEqualToString:@“teamname”]){
NSString*string=[[node childAtIndex:counter]stringValue];
yourLable.Text=string;
//NSLog(@“\n\n Title%@”,字符串);
}
else if([[[node childAtIndex:counter]name]IsequalString:@“ref”]){
NSString*string=[[node childAtIndex:counter]stringValue];
//NSLog(@“\n\n Ref%@”,字符串);
} 
}
}

有关TouchXML,请参见本教程和示例


  • 好吧,我认为NSXMLParser类应该会敲响警钟。 但是,它不是那么方便,您可以找到许多更好的解析器,例如TBXML()。
    此外,通常建议使用JSON而不是XML,因为它更轻,更容易解析。最常见的JSON解析器库是SBJSON。

    对于解析,您可以使用需要以下类的TBXML。 TBXML.h,TBXML.m&NSDataAdditions.h,NSDataAdditions.m

    我给出了一个示例。您可以根据代码进行更改

     NSString *cStr = [NSString stringWithFormat:@"<?xml version=\"1.0\" encoding=\"utf-8\"?><soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"><soap:Body><SetPatientBPXMLResponse xmlns=\"http://webservice.cruxmed.com/\"><SetPatientBPXMLResult><response><state><![CDATA[45djx96.jpg]]></state></response></SetPatientBPXMLResult></SetPatientBPXMLResponse></soap:Body></soap:Envelope>"];
    
        TBXML *tbxmlObj = [[TBXML alloc] initWithXMLString:cStr];
    
        // Obtain root element
        TBXMLElement * root = tbxmlObj.rootXMLElement;
        //-------------------------------------------
        if (root)
        {
            //-------------------------------------------
            // search for the first NewDataSet element within the root element's children
            // instantiate an NewDataSet objectGetDataInXMLFromStoredProcedureResponse
            TBXMLElement * SoapBody = [TBXML childElementNamed:@"soap:Body" parentElement:root];
    
            TBXMLElement * SoapResponse = [TBXML childElementNamed:@"SetPatientBPXMLResponse" parentElement:SoapBody];
    
            TBXMLElement * SoapResult = [TBXML childElementNamed:@"SetPatientBPXMLResult" parentElement:SoapResponse];
    
            //TBXMLElement * NewDataSet1 = [TBXML childElementNamed:@"response" parentElement:SoapResult];
    
            TBXMLElement * NewDataSet = [TBXML childElementNamed:@"response" parentElement:SoapResult];
            // if an _wspGetChartTemplateByAgent element was found
            while (NewDataSet != nil) {
    
    
                //cAccountName,fOrdTotTaxDEx,fOrdTotTax,;
    
                // instantiate a Order object
    
    
                // find the iInvoiceId
                TBXMLElement * AutoIndex = [TBXML childElementNamed:@"state" parentElement:NewDataSet];
    
                if (AutoIndex != nil)
                {
                    NSString* iVal=[TBXML textForElement:AutoIndex] ;
                    NSLog(@"iVal:%@",iVal);
                }
                // find the next sibling element named "_wspGetChartTemplateByAgent"
                NewDataSet = [TBXML nextSiblingNamed:@"response" searchFromElement:NewDataSet];
            }
        }
    
    NSString*cStr=[NSString stringWithFormat:@”“;
    TBXML*tbxmlObj=[[TBXML alloc]initWithXMLString:cStr];
    //获取根元素
    tbxmlement*root=tbxmlObj.rootxmlement;
    //-------------------------------------------
    如果(根)
    {
    //-------------------------------------------
    //在根元素的子元素中搜索第一个NewDataSet元素
    //实例化NewDataSet对象GetDataInXmlFromStoredProcedureResponse
    TBXMLElement*SoapBody=[TBXML ChildElementName:@“soap:Body”parentElement:root];
    TBXMLElement*SoapResponse=[TBXML ChildElementName:@“SetPatientBPXMLResponse”父元素:SoapBody];
    TBXMLElement*SoapResult=[TBXML ChildElementName:@“SetPatientBPXMLResult”父元素:SoapResponse];
    //TBXMLElement*NewDataSet1=[TBXML childElementNamed:@“response”parentElement:SoapResult];
    TBXMLElement*NewDataSet=[TBXML ChildElementName:@“response”parentElement:SoapResult];
    //如果找到_wspGetChartTemplateByAgent元素
    while(NewDataSet!=nil){
    //cAccountName,fOrdTotTaxDEx,fOrdTotTax,;
    //实例化订单对象
    //找到iInvoiceId
    TBXMLElement*AutoIndex=[TBXML ChildElementName:@“state”parentElement:NewDataSet];
    如果(自动索引!=nil)
    {
    NSString*iVal=[TBXML TEXTFOREMENT:AutoIndex];
    NSLog(@“iVal:%@”,iVal);
    }
    //查找名为“\u wspGetChartTemplateByAgent”的下一个同级元素
    NewDataSet=[TBXML NextSiblingName:@“响应”searchFromElement:NewDataSet];
    }
    }
    
    谢谢您的回复,但这对我不起作用。它说未知接收者“CXMLDocument”@AreebaKhan yes mate首先下载touchXML库并放入您的项目并导入头文件,如#import“CXMLDocument.h”,然后导入其工作,有关更多详细信息,请参阅链接教程和试用演示mate.)