【发布时间】:2014-02-14 09:45:03
【问题描述】:
当我在 NSLog 中显示我的数据时,它会正确显示。但是当我解析数据并将其插入数组时,数组显示错误的有序数据。当我在插入时,我在 HNM_Id 中得到了空值。所以我无法插入。问题出在哪里?
这是我正在使用的代码:
-(void)parseResponse:(NSData*)data{
NSString *xmlStr = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"parseResponse Xml string %@",xmlStr);
[sqliteManager deleteLoginDetails];
TBXMLEx *xml = [TBXMLEx parserWithXML:xmlStr];
if (xml.rootElement) {
TBXMLElementEx *returnNode = xml.rootElement;
TBXMLElementEx *fileNode = [returnNode child:@"AllHospitalNetwork"];
while ([fileNode next]) {
NSMutableArray* allHospitalNetwork = [NSMutableArray new];
TBXMLElementEx *hospitalNetworkNode = [fileNode child:@"HospitalNetwork"];
while ([hospitalNetworkNode next]) {
NSMutableDictionary* hospitalNetwork = [NSMutableDictionary new];
TBXMLElementEx *HNM_IdNode = [hospitalNetworkNode child:@"HNM_ID"];
NSLog(@"HNM is %@",HNM_IdNode);
if (HNM_IdNode) {
[hospitalNetwork setObject:HNM_IdNode.value forKey:@"HNM_ID"];
NSLog(@"HNM1 is %@",HNM_IdNode);
NSLog(@"HNM2 is %@",HNM_IdNode.value);
}
TBXMLElementEx *HNM_Network_NameNode = [hospitalNetworkNode child:@"HNM_Network_Name"];
if (HNM_Network_NameNode) {
[hospitalNetwork setObject:[NSString stringWithFormat:@"%@",HNM_Network_NameNode.value] forKey:@"HNM_Network_Name"];
}
TBXMLElementEx *HNM_StatusNode = [hospitalNetworkNode child:@"HNM_Status"];
if (HNM_StatusNode) {
[hospitalNetwork setObject:HNM_StatusNode.value forKey:@"HNM_Status"];
}
TBXMLElementEx *HNM_Created_DateNode = [hospitalNetworkNode child:@"HNM_Created_Date"];
if (HNM_Created_DateNode) {
[hospitalNetwork setObject:HNM_Created_DateNode.value forKey:@"HNM_Created_Date"];
}
TBXMLElementEx *HNM_Created_ByNode = [hospitalNetworkNode child:@"HNM_Created_By"];
if (HNM_Created_ByNode) {
[hospitalNetwork setObject:HNM_Created_ByNode.value forKey:@"HNM_Created_By"];
}
TBXMLElementEx *HNM_Modified_DateNode = [hospitalNetworkNode child:@"HNM_Modified_Date"];
if (HNM_Created_ByNode) {
[hospitalNetwork setObject:HNM_Modified_DateNode.value forKey:@"HNM_Modified_Date"];
}
TBXMLElementEx *HNM_Modified_ByNode = [hospitalNetworkNode child:@"HNM_Modified_By"];
if (HNM_Modified_ByNode) {
[hospitalNetwork setObject:HNM_Modified_ByNode.value forKey:@"HNM_Modified_By"];
}
[allHospitalNetwork addObject:hospitalNetwork];
NSLog(@"allHospitalNetwork insert is %@ ",allHospitalNetwork);
}
[sqliteManager insertHospitalNetwork:allHospitalNetwork];
}
parseResponse Xml 字符串 NSLog:
<?xml version="1.0"?>
<AllLoginDetails>
<AllHospitalNetwork>
<HospitalNetwork>
<HNM_ID>1</HNM_ID>
<HNM_Network_Name>Health Care</HNM_Network_Name>
<HNM_Status>A</HNM_Status>
<HNM_Created_Date>24/06/2013 17:46:58</HNM_Created_Date>
<HNM_Created_By>1</HNM_Created_By>
<HNM_Modified_Date />
<HNM_Modified_By />
</HospitalNetwork>
</AllHospitalNetwork>
但是数组值顺序改变了:
allHospitalNetwork insert is (
{
"HNM_Created_By" = 1;
"HNM_Created_Date" = "24/06/2013 17:46:58";
"HNM_ID" = 1;
"HNM_Modified_By" = "";
"HNM_Modified_Date" = "";
"HNM_Network_Name" = "Health Care";
"HNM_Status" = A;
}
插入:
-(void)insertHospitals:(NSMutableArray*)hospitals{
NSString* sqlStr = @"insert into Hospital_Master(\"HM_ID\",\"HM_HNM_ID\",\"HM_Hospital_Name\",\"HM_Status\",\"HM_Created_Date\",\"HM_Created_By\",\"HM_Modified_Date\",\"HM_Modified_By\")";
for (NSDictionary* feedDict in hospitals) {
if(i > 0){
sqlStr = [sqlStr stringByAppendingString:@" UNION "];
}
sqlStr = [sqlStr stringByAppendingString:[NSString stringWithFormat:@" SELECT \"%@\",\"%@\",\"%@\",\"%@\",\"%@\",\"%@\",\"%@\",\"%@\"",[feedDict objectForKey:@"HM_Id"] ,[feedDict objectForKey:@"HM_HNM_Id"],[feedDict objectForKey:@"HM_Hospital_Name"], [feedDict objectForKey:@"HM_Status"], [feedDict objectForKey:@"HM_Created_Date"],[feedDict objectForKey:@"HM_Created_By"],[feedDict objectForKey:@"HM_Modified_Date"],[feedDict objectForKey:@"HM_Modified_By"]]];
i++;
}
char * sql =sqlite3_mprintf("%q",[sqlStr UTF8String]);
sqlite3_exec(database, sql, 0, 0, 0);
NSLog(@"Insert failed: %s", sqlite3_errmsg(database));
sqlite3_free(sql);
}
插入失败:数据类型不匹配
【问题讨论】:
标签: ios objective-c database xml-parsing sqlite