2011-08-08 28 views
2
<ArrayOfBar xmlns="http://schemas.datacontract.org/2004/07/BarometerModel" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
    <Bar> 
    <BarId>1</BarId> 
    <BarType>Pub</BarType> 
    <Location>West Ocean City</Location> 
    <LocationId>1</LocationId> 
    <Name>Mickey Fine Bar & Grill</Name> 
    <Phone>9884020844</Phone> 
    <Rating>3.50</Rating> 
    <Status>Open</Status> 
    <TypeId>1</TypeId> 
    <Website>www.mickeyfinebar.com</Website> 
    </Bar> 
</ArrayOfBar>` 

如何使用觸摸XML解析此文件?在iPhone中使用觸摸xml解析文件

,這是代碼我使用:

-(void) grabRSSFeed:(NSString *)blogAddress { 

// Initialize the blogEntries MutableArray that we declared in the header 
blogEntries = [[NSMutableArray alloc] init];  

// Convert the supplied URL string into a usable URL object 
NSURL *url = [NSURL URLWithString: blogAddress]; 

// Create a new rssParser object based on the TouchXML "CXMLDocument" class, this is the 
// object that actually grabs and processes the RSS data 
CXMLDocument *rssParser = [[[CXMLDocument alloc] initWithContentsOfURL:url options:0 error:nil] autorelease]; 

// Create a new Array object to be used with the looping of the results from the rssParser 
NSArray *resultNodes = NULL; 

// Set the resultNodes Array to contain an object for every instance of an node in our RSS feed 
resultNodes = [rssParser nodesForXPath:@"//Bar" error:nil]; 

// Loop through the resultNodes to access each items actual data 
for (CXMLElement *resultElement in resultNodes) { 

    // Create a temporary MutableDictionary to store the items fields in, which will eventually end up in blogEntries 
    NSMutableDictionary *blogItem = [[NSMutableDictionary alloc] init]; 

    // Create a counter variable as type "int" 
    int counter; 

    // Loop through the children of the current node 
    for(counter = 0; counter < [resultElement childCount]; counter++) { 

     // Add each field to the blogItem Dictionary with the node name as key and node value as the value 
     [blogItem setObject:[[resultElement childAtIndex:counter] stringValue] forKey:[[resultElement childAtIndex:counter] name]]; 
    } 

    // Add the blogItem to the global blogEntries Array so that the view can access it. 
    [blogEntries addObject:[blogItem copy]]; 
} 

}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
return 1; 
} 


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
return [blogEntries count]; 
} 


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

static NSString *CellIdentifier = @"Cell"; 

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
if (cell == nil) { 
    cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease]; 
} 

// Set up the cell 
int blogEntryIndex = [indexPath indexAtPosition: [indexPath length] -1]; 
cell.textLabel.text=[[blogEntries objectAtIndex: blogEntryIndex] objectForKey: @"BarId"]; 
return cell; 
} 

任何一個可以幫我如何解析呢?

回答

6
CXMLDocument *rssParser = [[[CXMLDocument alloc] initWithContentsOfURL:url options:0 error:nil]autorelease]; 

NSArray *items = [rssParser nodesForXPath:@"//Bar" error:nil]; 
for (CXMLElement *resultElement in items) { 
    Data *objData = [[Data alloc] init]; 

    NSArray *BarIds = [resultElement elementsForName:@"BarId"]; 
    for (CXMLElement *id in BarIds) { 
     objData.id = id.stringValue; 
     break; 
    } 
    NSArray *Types = [resultElement elementsForName:@"Type"]; 
    for (CXMLElement *Type in Types) { 
     objData.type = Type.stringValue; 
     break; 
    } 
      NSArray *Locations = [resultElement elementsForName:@"Location"]; 
    for (CXMLElement *Location in Locations) { 
     objData.type = Location.stringValue; 
     break; 
    }... 

使用此您可以獲取使用TuochXML的XML文件中的數據,比objData保存爲Array對象 ...,並用它在表來表示。

可能對您有用