Iphone 如何读取XML并在标签上显示数据?
我有一个XMLIphone 如何读取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 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.)