我正试图从UIWebView
中提取一些XML,但没有太多运气。这就是整个文档的样子:
<?xml version="1.0" encoding="utf-8"?>
<authResponse xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<firstName>Name here</firstName>
<lastName>Name here</lastName>
<membershipTier>Membership level</membershipTier>
<errorMessage />
<isValid>1</isValid>
</authResponse>
我尝试了stringByEvaluatingJavaScriptFromString
方法的多种变体,但这是唯一能为我返回任何内容的方法:
[webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.textContent"]
但是,我需要原始XML,而不是文本内容。有什么建议吗?
编辑:我可以控制XML,因此可以根据需要进行修改。\
编辑2 :根据要求,我用来加载请求的代码如下。请注意,此请求适用于登录屏幕。一旦用户输入了他们的凭证,那之后的页面就是我试图从中提取结果的页面。我通过测试webViewDidFinishLoad
对象的当前mainDocumentURL
来确定UIWebView
中的当前页面。
NSString* urlString = kLoginURL;
NSURL* url = [NSURL URLWithString:urlString];
NSURLRequest* request = [NSURLRequest requestWithURL:url];
UIWebView* tmpWebView = [[UIWebView alloc] init];
self.webView = tmpWebView;
[tmpWebView release];
self.webView.delegate = self;
[self.webView loadRequest:request];
答案 0 :(得分:3)
刚刚写了一个小测试程序来解决这个问题(好玩!)。它通过以下方式加载UIWebView内容:
NSString * data = @"<?xml version=\"1.0\" encoding=\"utf-8\"?><authResponse xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"><firstName>Name here</firstName><lastName>Name here</lastName><membershipTier>Membership level</membershipTier><errorMessage /><isValid>1</isValid></authResponse>";
[self.webview loadHTMLString: data baseURL: nil];
然后我将字符串document.getElementsByTagName('body')[0].innerHTML
传递给stringByEvaluatingJavaScriptFromString
并返回您想要的内容:
<authresponse xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><firstname>Name here</firstname><lastname>Name here</lastname><membershiptier>Membership level</membershiptier><errormessage><isvalid>1</isvalid></errormessage></authresponse>
答案 1 :(得分:1)
您可以尝试使用kissxml来检索整个xml结构。
或者您可以将响应保存到NSURLRequest的字符串中,或者如果您使用其他库来进行http连接
NSURL *url = [[NSURL alloc] initWithString:@"http://www.w3schools.com/xml/note.xml"];
NSString *myString = [[NSString alloc] initWithData:[NSData dataWithContentsOfURL:(NSURL*)url] encoding:NSISOLatin1StringEncoding];
上面的代码是关于如何检索xml结构的示例。这比使用uiwebview容易得多。示例xml编码使用ISO-8859-1,因此您必须设置正确的编码,以便数据可读
答案 2 :(得分:1)
我将整个html作为一个单独的线程上的字符串抓取,或者使用它作为加载webview的基础:
NSString *xmlString = [NSString stringWithContentsOfURL:yourURL]
答案 3 :(得分:1)
我建议使用Nik的建议 - 获取请求URL并在NSString中获取其内容。
或者您可以向登录URL发送请求(您已经拦截了正在发送的请求)并以字符串形式获得响应。
如果您想阅读整个正文标记的内容或html和正文标记的内容,您可能只是这样做
NSString *html = [yourWebView stringByEvaluatingJavaScriptFromString:@"document.body.innerHTML"];
或
NSString *html = [yourWebView stringByEvaluatingJavaScriptFromString:@"document.all[0].innerHTML"];
答案 4 :(得分:0)
您可以根据需要使用其中任何一种:
NSString *html1 = [webView stringByEvaluatingJavaScriptFromString:
@"document.body.innerHTML"];
NSString *html2 = [webView stringByEvaluatingJavaScriptFromString:
@"document.documentElement.outerHTML"];