2013年3月14日 星期四

XML格式的網路英文字典(可用來測試NSXMLParser)

http://fy.webxml.com.cn/webservices/EnglishChinese.asmx/Translator?wordkey=word

其中最後的word就是你想要查詢的單字


Code如下,還需要用Delegate
NSLog(@"beginto request webservice!!!!");
NSURL*url=[NSURLURLWithString:[NSStringstringWithFormat: @"http://fy.webxml.com.cn/webservices/EnglishChinese.asmx/Translator?wordkey=%@",ipAddress.text]];
// xmlElements=[[NSMutableArray alloc]init];
NSXMLParser*xml=[[NSXMLParseralloc] initWithContentsOfURL:url];
[xml setShouldProcessNamespaces:NO];
[xml setShouldReportNamespacePrefixes:NO];
[xml setShouldResolveExternalEntities:NO];
[xml setDelegate:self];
[xml parse];


另一種包成方法的方式
//1, 構建解析方法
-(void)parseXMLFile:(NSURL *)XMLURL //XMLURL为第一個文件的URL
{
NSXMLParser *eventParser = [[NSXMLParser alloc] initWithContentsOfURL:XMLURL];
[eventParser setDelegate:self]; //設置代理为本地
[eventParser parse]; //開始解析
NSLog(@"end Of parseXMLFile");
}


//2, 解析開始後,所有XML的內容由NSXMLParserDelegate處理
// 所以一定要注意在本地添加到文件頭
//在NSXMLParser在NSXMLParser讀到<p>的時候重寫一個標簽,原來的是XML中的,無法直接使用

//第一個代理方法:開始處理xml數據,它會把整個xml遍曆一遍,識別元素節點名稱
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
if ([elementName isEqualToString:@"p"])
{
[htmlDataString appendFormat:@"<p>"];
needOrNot = YES; //我們需要<p>和</p>中間的內容,其餘的在end中設置NO
return;
}
}

//第二個代理方法:也就是得到文本節點裏存儲的信息數據
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
if(needOrNot) { [htmlDataString appendString:string]; //如上,將需要的字段添加到得到的html結構String中
}
}

第三個代理方法:存儲從第二個代理方法中獲取到的信息
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{  
if ([elementName isEqualToString:@"p"])
{
[htmlDataString appendFormat:@""]; needOrNot = NO; //不需要的內容不允許上面的delegate去讀取到htmlDataString中
return;
}
}

- (void)parserDidEndDocument:(NSXMLParser *)parser
{
NSLog(htmlDataString); //在結束後輸出得到的html數據結構.
}

//另外:
//解析開始執行的方法
- (void)parserDidStartDocument:(NSXMLParser *)parser{
//todo something
}
//解析結束執行的方法
- (void)parserDidEndDocument:(NSXMLParser *)parser{
//todo something
}
//當出現解析錯誤的時候,會執行這個方法
- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError{
//todo something
}

沒有留言:

張貼留言