Ios 使用NSXMLParser仅解析特定标记内的元素
我只需要解析琐事标记之间存在的元素。我不需要SAndWin之间的元素。感谢您的帮助。提前谢谢 在下面的示例格式中,我需要从琐事标记解析Score、Username和only 示例XML格式:Ios 使用NSXMLParser仅解析特定标记内的元素,ios,nsxmlparser,Ios,Nsxmlparser,我只需要解析琐事标记之间存在的元素。我不需要SAndWin之间的元素。感谢您的帮助。提前谢谢 在下面的示例格式中,我需要从琐事标记解析Score、Username和only 示例XML格式: <Top10Score> <SAndWin> <Member> <SCORE>278</SCORE> <MEM_ID>10</MEM_ID> <EMAIL>ggg10@gma
<Top10Score>
<SAndWin>
<Member>
<SCORE>278</SCORE>
<MEM_ID>10</MEM_ID>
<EMAIL>ggg10@gmail.com</EMAIL>
<USERNAME>prabu govind</USERNAME>
</Member>
<Member>
<SCORE>278</SCORE>
<MEM_ID>10</MEM_ID>
<EMAIL>ggg10@gmail.com</EMAIL>
<USERNAME>prabu govind</USERNAME>
</Member>
<Member>
<SCORE>278</SCORE>
<MEM_ID>10</MEM_ID>
<EMAIL>c1@gmail.com</EMAIL>
<USERNAME>Name1</USERNAME>
</Member> </SAndWin>
<Member>
<SCORE>278</SCORE>
<MEM_ID>10</MEM_ID>
<EMAIL>a1@gmail.com</EMAIL>
<USERNAME>Name2</USERNAME>
</Member>
<Member>
<SCORE>278</SCORE>
<MEM_ID>10</MEM_ID>
<EMAIL>b2@gmail.com</EMAIL>
<USERNAME>Name3</USERNAME>
</Member>
<Trivia>
<Member>
<SCORE>278</SCORE>
<MEM_ID>44</MEM_ID>
<EMAIL>ggg10@gmail.com</EMAIL>
<USERNAME>prabu govind</USERNAME>
</Member>
<Member>
<SCORE>278</SCORE>
<MEM_ID>48</MEM_ID>
<EMAIL>ggg10@gmail.com</EMAIL>
<USERNAME>prabu govind</USERNAME>
</Member>
<Member>
<SCORE>278</SCORE>
<MEM_ID>22</MEM_ID>
<EMAIL>cname@gmail.com</EMAIL>
<USERNAME>Name8</USERNAME>
</Member> </SAndWin>
<Member>
<SCORE>278</SCORE>
<MEM_ID>19</MEM_ID>
<EMAIL>cname1@gmail.com</EMAIL>
<USERNAME>Name6</USERNAME>
</Member>
<Member>
<SCORE>278</SCORE>
<MEM_ID>12</MEM_ID>
<EMAIL>ename@gmail.com</EMAIL>
<USERNAME>Name4</USERNAME>
</Member>
</Trivia>
</Top10Score>
278
10
ggg10@gmail.com
普拉布戈文德酒店
278
10
ggg10@gmail.com
普拉布戈文德酒店
278
10
c1@gmail.com
名称1
278
10
a1@gmail.com
姓名2
278
10
b2@gmail.com
名字3
278
44
ggg10@gmail.com
普拉布戈文德酒店
278
48
ggg10@gmail.com
普拉布戈文德酒店
278
22
cname@gmail.com
姓名8
278
19
cname1@gmail.com
名字6
278
12
ename@gmail.com
名字4
只有在找到琐事标记时才需要初始化数组。并在结束成员标记后将元素添加到数组中
您必须在.h文件中声明xmlParser、ar1、dic1和curElement
#pragma标记-NSXMLParser委托
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
if ([elementName isEqualToString:@"Trivia"]) {
ar1 = [[NSMutableArray alloc]init];
} else if ([elementName isEqualToString:@"Member"]) {
dic1 = [[NSMutableDictionary alloc]init];
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
curElement = string;
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
if ([elementName isEqualToString:@"Member"]) {
[ar1 addObject:dic1];
} else if ([elementName isEqualToString:@"Trivia"]) {
NSLog(@"%@",ar1);
} else {
[dic1 setObject:curElement forKey:elementName];
}
}
- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError
{
}
只有在找到琐事标记时才需要初始化数组。并在结束成员标记后将元素添加到数组中 您必须在.h文件中声明xmlParser、ar1、dic1和curElement #pragma标记-NSXMLParser委托
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
if ([elementName isEqualToString:@"Trivia"]) {
ar1 = [[NSMutableArray alloc]init];
} else if ([elementName isEqualToString:@"Member"]) {
dic1 = [[NSMutableDictionary alloc]init];
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
curElement = string;
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
if ([elementName isEqualToString:@"Member"]) {
[ar1 addObject:dic1];
} else if ([elementName isEqualToString:@"Trivia"]) {
NSLog(@"%@",ar1);
} else {
[dic1 setObject:curElement forKey:elementName];
}
}
- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError
{
}
是一个SAX解析器。因此,实现您的需求非常困难(您需要一个标志并不困难)
你可以这样做:
- (void)parseMyXML:(NSString *)xml
{
GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:[xml dataUsingEncoding:NSUTF8StringEncoding] options:0 error:&error];
if (doc == nil) { return nil; }
NSArray *members = [doc nodesForXPath:@"//Top10Score/Trivia" error:nil];
for (GDataXMLElement *member in members)
{
int count = 0;
NSArray *names = [member elementsForName:@"Member"];
while (names.count >count)
{
GDataXMLElement *firstName = (GDataXMLElement *) [names objectAtIndex:0];
NSLog(@"Value : %@",[[names objectAtIndex:0] stringValue]);
//store data here
count++;
}
}
}
在.h文件中声明BOOL,如:
布尔旗
并实现如下解析方法:
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
flag = false;
if ([elementName isEqualToString:@"Trivia"])
{
flag = true;
}
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
if ([elementName isEqualToString:@"Member"] && flag)
{
//read the value here
}
}
为了完成类似的任务,最好使用类似的DOM解析器(我建议使用DOM解析器来满足这个需求) 如果您使用的是GDataXMLParser,则可以执行以下操作:
- (void)parseMyXML:(NSString *)xml
{
GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:[xml dataUsingEncoding:NSUTF8StringEncoding] options:0 error:&error];
if (doc == nil) { return nil; }
NSArray *members = [doc nodesForXPath:@"//Top10Score/Trivia" error:nil];
for (GDataXMLElement *member in members)
{
int count = 0;
NSArray *names = [member elementsForName:@"Member"];
while (names.count >count)
{
GDataXMLElement *firstName = (GDataXMLElement *) [names objectAtIndex:0];
NSLog(@"Value : %@",[[names objectAtIndex:0] stringValue]);
//store data here
count++;
}
}
}
是一个SAX解析器。因此,实现您的需求非常困难(您需要一个标志并不困难)
你可以这样做:
- (void)parseMyXML:(NSString *)xml
{
GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:[xml dataUsingEncoding:NSUTF8StringEncoding] options:0 error:&error];
if (doc == nil) { return nil; }
NSArray *members = [doc nodesForXPath:@"//Top10Score/Trivia" error:nil];
for (GDataXMLElement *member in members)
{
int count = 0;
NSArray *names = [member elementsForName:@"Member"];
while (names.count >count)
{
GDataXMLElement *firstName = (GDataXMLElement *) [names objectAtIndex:0];
NSLog(@"Value : %@",[[names objectAtIndex:0] stringValue]);
//store data here
count++;
}
}
}
在.h文件中声明BOOL,如:
布尔旗
并实现如下解析方法:
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
flag = false;
if ([elementName isEqualToString:@"Trivia"])
{
flag = true;
}
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
if ([elementName isEqualToString:@"Member"] && flag)
{
//read the value here
}
}
为了完成类似的任务,最好使用类似的DOM解析器(我建议使用DOM解析器来满足这个需求) 如果您使用的是GDataXMLParser,则可以执行以下操作:
- (void)parseMyXML:(NSString *)xml
{
GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:[xml dataUsingEncoding:NSUTF8StringEncoding] options:0 error:&error];
if (doc == nil) { return nil; }
NSArray *members = [doc nodesForXPath:@"//Top10Score/Trivia" error:nil];
for (GDataXMLElement *member in members)
{
int count = 0;
NSArray *names = [member elementsForName:@"Member"];
while (names.count >count)
{
GDataXMLElement *firstName = (GDataXMLElement *) [names objectAtIndex:0];
NSLog(@"Value : %@",[[names objectAtIndex:0] stringValue]);
//store data here
count++;
}
}
}
成员元素具有子标签。我需要解析那些标签。。你能建议更多的成员元素有子标签吗。我需要解析那些标签。。你能进一步建议吗more@Gowtham:很高兴:)@Gowtham:很高兴:)