我正在尝试从URL解析一些XML数据。它几乎正常工作,但没有记录预期的数据。
以下是xml数据的示例
<?xml version="1.0" encoding="utf-8"?> <result>
<row>
<id>1</id>
<menu_id>1</menu_id>
<group_id>1</group_id>
<name>Merchandise</name>
<image>bag of beans.jpg</image>
</row>
<row>
<id>4</id>
<menu_id>1</menu_id>
<group_id>1</group_id>
<name>Misc</name>
<image>tea.jpg</image>
</row>
这是我的代码:
#pragma mark - NSXMLParserDelegate
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString*)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
// If you have a more complex object you could init here
// Since I'm just storing a string I won't do anything
if ([elementName isEqualToString:@"name"]) {
// NSLog(@"didStartElement - %@", elementName);
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
if (!self->currentStringValue) {
self->currentStringValue = [[NSMutableString alloc] init];
// NSLog(@"didStartElement - %@", string);
}
[self->currentStringValue appendString:string];
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName {
NSString *currentStringValue = [self->currentStringValue
stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
self->currentStringValue = nil;
if ([elementName isEqualToString:@"name"]) {
self->ourExpectedElementValue = currentStringValue;
NSLog(@"%@",currentStringValue);
}
}
正如您在XML数据中看到的那样,有多个'name'元素和第三行到最后一行读取
NSLog(@"%@",currentStringValue);
用于记录所有<name>
标记内的所有值,但只记录此内容:
2013-07-31 19:02:56.394 Touch2Go[1775:11303] Merchandise
答案 0 :(得分:1)
正如讨论中所述,XML数据没有单个顶级元素 根据XML规范的要求,它看起来像这样:
<row>
...
</row>
<row>
...
</row>
<row>
...
</row>
解析器在第一个完整的“row”标记之后停止解析(并返回错误条件)。如果数据包含在单个顶级元素中
<result>
<row>
...
</row>
<row>
...
</row>
<row>
...
</row>
</result>
然后按预期解析所有元素。
答案 1 :(得分:0)
你必须采取数组。当它从xml中获取字符串时,你必须在didEndElement方法的数组中添加它。