从UIWebView中提取XML

时间:2011-10-06 23:14:11

标签: iphone objective-c uiwebview

我正试图从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];

5 个答案:

答案 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"];