0

I am trying to get parse data and load into array for processing. I have tried many possibilities, but I can not get a data(string) value. Can anyone provide specific direction? I have spent several days on this issue, looking at many sources but most deal with http address and not a datas file.

Disk File contents (partial):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
    <dict>
        <key>Ext</key>
        <string>-</string>
        <key>Newsgls</key>
        <string>1</string>
        <key>Plate</key>
        <string>0</string>
        <key>Scott</key>
        <string>4435</string>
        <key>Series</key>
        <string>0</string>
        <key>Sheet</key>
        <string>0</string>
        <key>Usedsgls</key>
        <string>0</string>
    </dict>
    <dict>
        <key>Ext</key>
        <string>-</string>
        <key>Newsgls</key>
        <string>1</string>
        <key>Plate</key>

Code Used:

   -(IBAction)Parser:(id)sender{

        NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:[NSURL fileURLWithPath:_fullInventoryDataPathString]];

        [xmlParser setDelegate:self];

        BOOL flag = [xmlParser parse];

        if (flag){
            NSLog(@"OK");

        }else{
            NSLog(@"False");

        }
        //[xmlParser release];  //Not allowed with ARC

    }

-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:  (NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{

    NSLog(@"found a element named %@", elementName);

    if ([elementName isEqualToString:@"array"]){

          // initialize the array

         invData = [[NSMutableArray alloc]init];
    }

    if ([elementName isEqualToString:@"dict"]){
        if ([elementName isEqualToString:@"key"]){
            if ([ elementName isEqualToString:@"string"]){

                //add file data

        [invData addObject:Ext];
        [invData addObject:Newsgls];
        [invData addObject:Plate];
        [invData addObject:Scott];
        [invData addObject:Series];
        [invData addObject:Sheet];
        [invData addObject:Usedsgls];

                // test data load in array

        NSLog(@" dictionary objects 1 = %@",[invData objectAtIndex:0]);

            }
        }
    }

}

Output Received (Unable to get values for keys & load into separate array):

2014-08-17 17:46:19.890 DiskFileParse[8590:303] Documents Directory = /Users/tllengel/Documents
2014-08-17 17:46:19.891 DiskFileParse[8590:303] Inventory Dir Path = /Users/tllengel/Documents/Stamp Project Data
2014-08-17 17:46:19.891 DiskFileParse[8590:303] Inventory Data Path = /Users/tllengel/Documents/Stamp Project Data/InventoryDB.xml
2014-08-17 17:46:19.891 DiskFileParse[8590:303] Inventory Data File Path = /Users/tllengel/Documents/Stamp Project Data/InventoryDB.xml
2014-08-17 17:46:21.694 DiskFileParse[8590:303] Parser Did Start Document
2014-08-17 17:46:21.694 DiskFileParse[8590:303] found a element named plist
2014-08-17 17:46:21.694 DiskFileParse[8590:303] found a element named array
2014-08-17 17:46:21.694 DiskFileParse[8590:303] found a element named dict
2014-08-17 17:46:21.694 DiskFileParse[8590:303] found a element named key
2014-08-17 17:46:21.695 DiskFileParse[8590:303] found a element named string
2014-08-17 17:46:21.695 DiskFileParse[8590:303] found a element named key
2014-08-17 17:46:21.695 DiskFileParse[8590:303] found a element named string
2014-08-17 17:46:21.695 DiskFileParse[8590:303] found a element named key
2014-08-17 17:46:21.695 DiskFileParse[8590:303] found a element named string
2014-08-17 17:46:21.695 DiskFileParse[8590:303] found a element named key
2014-08-17 17:46:21.695 DiskFileParse[8590:303] found a element named string
2014-08-17 17:46:21.695 DiskFileParse[8590:303] found a element named key
2014-08-17 17:46:21.696 DiskFileParse[8590:303] found a element named string
2014-08-17 17:46:21.696 DiskFileParse[8590:303] found a element named key
2014-08-17 17:46:21.696 DiskFileParse[8590:303] found a element named string
2014-08-17 17:46:21.696 DiskFileParse[8590:303] found a element named key
2014-08-17 17:46:21.696 DiskFileParse[8590:303] found a element named string
2014-08-17 17:46:21.696 DiskFileParse[8590:303] found a element named dict
2014-08-17 17:46:21.696 DiskFileParse[8590:303] found a element named key
2014-08-17 17:46:21.696 DiskFileParse[8590:303] found a element named string
2014-08-17 17:46:21.697 DiskFileParse[8590:303] found a element named key
2014-08-17 17:46:21.697 DiskFileParse[8590:303] found a element named string
2014-08-17 17:46:21.697 DiskFileParse[8590:303] found a element named key
2014-08-17 17:46:21.697 DiskFileParse[8590:303] found a element named string
2014-08-17 17:46:21.697 DiskFileParse[8590:303] found a element named key
2014-08-17 17:46:21.697 DiskFileParse[8590:303] found a element named string
TLL
  • 35
  • 8
  • There is nothing wrong with the "null" in the output. The elements have no qName. Where's your code to get the actual value for each of the "key" and "string" elements? – rmaddy Aug 16 '14 at 01:24
  • Thank you for reply. That is the only code I have at this point. Can you suggest how I would retrieve those values. I have tried to test for keys like "Ext" for a value but I did not get detail. – TLL Aug 16 '14 at 01:28
  • There are plenty of existing resources and questions that go into detail for parsing XML with `NSXMLParser`. Do some searching. There are a few more delegate methods you need to implement. – rmaddy Aug 16 '14 at 01:30
  • See http://stackoverflow.com/questions/1089737/parsing-xml-in-cocoa?rq=1 – rmaddy Aug 16 '14 at 01:31
  • I have tried the following without success:if ([value isEqualToString:@"Ext"]){ NSString *iExt = value; //[iExt addObject:invExt]; NSLog(@" Inventory Ext Strings Attribute = %@", iExt); – TLL Aug 16 '14 at 01:31
  • I have tried some but they must be old i.e. release is not allowed in ARC. – TLL Aug 16 '14 at 01:33

0 Answers0