TBXML将复杂的xmlparsing到数组中

我有一个XML响应,我需要设置到一个数组。 问题是我需要访问每个元素,并将其存储在一个数组中,以便我可以将其用于tableview。

<?xml version="1.0" encoding="UTF-8"?> <Response xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://schema.2sms.com/2.0/schema/0310_ResponseReportStandard.xsd" Version="1.0"> <Error> <ErrorCode>00</ErrorCode> <ErrorReason>OK</ErrorReason> </Error> <ResponseData> <Identification> <UserID>jonathan.pink@2sms.com</UserID> </Identification> <Result>2 records were returned</Result> <Detail> <ReportTitle>Message Summary: Today</ReportTitle> <Record> <Destination>447790686158</Destination> <Status>WithNetwork</Status> <GUID><![CDATA[2011-03-22T10:54:22.097Z]]></GUID> <DateSubmitted>2011-03-22T10:54:22.097</DateSubmitted> <DateToSend></DateToSend> <DateSent>2011-03-22T10:54:22.533</DateSent> <DateReceived></DateReceived> <Message><![CDATA[Yet again another test]]></Message> <ID>2011-03-22 10:54:22.250HIHIIOJTFVETW85TS</ID> </Record> <Record> <Destination>447790686158</Destination> <Status>SUCCESS</Status> <GUID><![CDATA[2011-03-22T10:50:40.064Z]]></GUID> <DateSubmitted>2011-03-22T10:50:40.063</DateSubmitted> <DateToSend></DateToSend> <DateSent>2011-03-22T10:50:42.473</DateSent> <DateReceived>2011-03-22T10:50:54.570</DateReceived> <Message><![CDATA[This is a test]]></Message> <ID>2011-03-22 10:50:40.210DRUDVMCEZGETW85TS</ID> </Record> <ReportPage ReportID="775797" ItemsPerPage="25" Page="1" TotalItems="2" /> </Detail> </ResponseData> </Response> 

我已经初始化了TBXML对象,但不知道如何得到任何重复的信息,我知道它需要某种循环,但是我对objective-c很新,所以它certificate了一个挑战。

我需要从xml中获取<destination> , <status>, <datesent>, <message> 。 可以有多达25个logging….

希望有一个人能帮助这个一直在我的脑袋!

我最近做了类似的事,可以快速适应,我的XML是:

 <?xml version="1.0" encoding="ISO-8859-1"?> <agencies> <agency> <name>Agency 1 name</name> <addressFirstLine>Immeuble XYZ<addressFirstLine> <addressSecondLine>rue de la republique</addressSecondLine> <addressThirdLine>69007 Lyon</addressThirdLine> <telNumber>01 23 45 67 89</telNumber> </agency> <agency> <name>Agency 2 name</name> <addressFirstLine>Immeuble ABC<addressFirstLine> <addressSecondLine>rue de la republique</addressSecondLine> <addressThirdLine>69007 Lyon</addressThirdLine> <telNumber>01 23 45 67 89</telNumber> </agency> </agencies> 

我用来parsing这个代码(得到我的NSArray调用agencies的结果):

  TBXML *tbxml = [[TBXML tbxmlWithXMLFile:yourXmlFile retain]; TBXMLElement *rootXMLElement = tbxml.rootXMLElement; if (rootXMLElement) { self.agencies = [self traverseElement:rootXMLElement]; [delegate managerDidReceiveData]; } // release resources [tbxml release]; 

而我的function转换为数组:

 - (NSArray *)traverseElement:(TBXMLElement *)element { NSMutableArray *tmpAgencies = [[NSMutableArray alloc] init]; TBXMLElement *agenciesXmlElement = element->firstChild; TBXMLElement *agencyXmlElement; do { // if the element has child elements, process them if ((agencyXmlElement = agenciesXmlElement->firstChild)) { NSMutableDictionary *tmpAgency = [[NSMutableDictionary alloc] init]; do { [tmpAgency setValue:[TBXML textForElement:agencyXmlElement] forKey:[TBXML elementName:agencyXmlElement]]; // Obtain next sibling element } while ((agencyXmlElement = agencyXmlElement->nextSibling)); [tmpAgencies addObject:tmpAgency]; [tmpAgency release]; } // Obtain next sibling element } while ((agenciesXmlElement = agenciesXmlElement->nextSibling)); return tmpAgencies; } 

这个函数将返回一个包含代表你的Records NSDictionary对象的数组。 NSDictionary很容易使用,以获得您使用的属性[yourDictionary objectForKey:yourXmlNode] 。 文档在这里: NSDictionary 。