当前位置: 首页 > 知识库问答 >
问题:

需要从其他网页解析一个值。首先,我需要调用其他网页并从中解析XML值

仲孙才捷
2023-03-14

我正在开发一个应该显示货币汇率的项目,所以我计划调用另一个网页从该页面获得汇率值。我在Angular-js中尝试了,但是我不能从网页中得到响应(在Angular-js中:我们只能调用JSON/REST url)。我在XMLHttpRequest中尝试了,但是如果我们从其他域(CORS的Beacuse)调用网页,它不会调用该网页(url)。

类似地,我在Java中进行了尝试,成功地调用了网页并得到了XML,但无法解析值(得到错误:“un-formatted XML”)。

可以有人请指导我,我如何可以从任何网页的价值。请让我知道我可以通过使用API调用或任何webservice调用来实现。如果我使用API或Webservice调用,那么我是否需要与moneyexchange网站的供应商沟通,以便让API/Webservice使用特定的值??。

请帮助我相同(我准备在任何技术上实现)

Java代码:

    package webXMRead;
import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URISyntaxException; import java.net.URL;
import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory;
import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.util.EntityUtils; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList;
public class webPageXMLRead { public static void main(String args[]) throws URISyntaxException, ClientProtocolException, IOException, MalformedURLException {
//For study and example purpose I took url:http://www.google.com , need to parse this website, I am not using for any profit purpose
String url = "http://www.google.com"; System.out.println("Url is careated****"); URL url2 = new URL(url); HttpGet httpGet = new HttpGet(url); HttpClient httpClient = new DefaultHttpClient();

HttpResponse httpResponse = httpClient.execute(httpGet);
HttpEntity entity = httpResponse.getEntity();
System.out.println("Entity is*****" + entity);
try {
String xmlParseString = EntityUtils.toString(entity);
System.out.println("This Stirng ***" + xmlParseString);

HttpURLConnection connection = (HttpURLConnection) url2
                .openConnection();
InputStream inputStream = connection.getInputStream();

  DocumentBuilderFactory builderFactory = DocumentBuilderFactory
               .newInstance();
  DocumentBuilder documentBuilder = builderFactory
               .newDocumentBuilder();
 Document document = documentBuilder.parse(inputStream);
document.getDocumentElement().normalize();



  NodeList nodeList = document.getElementsByTagName("rss");
  System.out.println("This is firstnode" + nodeList);
   for (int getChild = 0; getChild < nodeList.getLength(); getChild++) {
     Node Listnode = nodeList.item(getChild);
     System.out.println("Into the for loop"
                    + Listnode.getAttributes().getLength());
     Element firstnoderss = (Element) Listnode;
     System.out.println("ListNodes" + Listnode.getAttributes());
     System.out.println("This is node list length"
                + nodeList.getLength());

     Node Subnode = nodeList.item(getChild);
     System.out.println("This is list node" + Subnode);

  }

 } catch (Exception exception) {

        System.out.println("Exception is" + exception);


 }
}
<!DOCTYPE html>
<html>
<head>
    <title>test your webservice</title>
</head>
<body>


<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<article ng-app="webpage">
  <section ng-controller="booksCtrl">
  <h2 >{{data}} </h2>
  </section>
</article>
<script type="text/javascript">
var app = angular.module('webpage', []);

app.controller('booksCtrl', function($scope, $http) {
/* $httpProvider.defaults.useXDomain = true;*/
    /*delete $http.defaults.headers.common['X-Requested-With'];*/

/*just for study purpose, not for any profit usage, so for example purpose I used URL:http://www.google.com, */

  $http.get("http://www.google.com")
    .then(function(response) {
        $scope.data=response.data;
        
 
    },

    function(errresponse) {
     alert("err"+errresponse.status);
    });
});

</script>
</body>
</html>

共有1个答案

盖翰池
2023-03-14

基本上,您需要解析HTML文档。为此,请使用jsoup。这将是一个理想的适合四个您的用例。一旦在java中有了Document对象,就可以解析并从中获得所需的值。

String html = "<html><head><title>First parse</title></head>"
  + "<body><p>Parsed HTML into a doc.</p></body></html>";
Document doc = Jsoup.parse(html);
 类似资料:
  • 问题内容: 我有2页:和。我只有在先登录后才能访问。如果不经过其他访问,我只是通过浏览器拒绝访问(没有重定向到登录)。在登录后,我就可以访问另一个。 我的问题是使用curl命令执行此操作。我可以成功使用curl 登录,但是尝试访问后会被拒绝。 我使用以下内容: 我尝试将第二行与&一起使用,但没有用户/密码部分,但仍然无法正常工作。两个页面都使用相同的CA,所以这不是问题。有什么建议么?谢谢 问题答

  • 我仍然是Java的新手,我正在努力使这个程序适合我的任务。 问题是: 杰夫在你家附近经营着一家当地的零售店。他已与您签订合同,让您创建一个交互式应用程序,以帮助他增加员工工资。创建一个名为 Details 的类,该类将包含员工 ID 号、名字、姓氏和薪水的获取和设置方法。包括一个名为getUpdateSalary()的方法,该方法将使员工的薪水增加10%。在您的主类中,包括一个名为 () 的静态方

  • 问题内容: 我目前正在尝试开发一个应用程序,使其访问以下网站(http://lulpix.com)并解析HTML,并从以下部分获取img src 当然,每次加载页面时它都会有所不同,因此,例如,我无法将直接URL分配给我打算做的异步图像库 加载页面 >解析img src>下载Async到imageview>重新加载lulpix.com>重新开始 然后将它们分别放置在图像视图中,用户可以从中向左或向

  • 我有一个json文件,大约1MB。我正在尝试用Klaxon库解析这个JSON,但需要大约30秒。我不想使用SQLite。我能做什么?

  • 我一直在寻找答案,但我没有找到它,我需要在我继续我的测试之前弄明白。 我正在通过安装bash创建一个基于Alpine的映像,如下图所示: Hello.sh 我可以在不向docker-compose.yml添加的情况下访问,所以Alpine的映像中一定有我不理解和希望理解的东西。

  • 假设我有两个html文件具有如下功能: 我想从a.html直接指向B.html,然后直接调用函数B。我怎样才能做到?。因为我想要将JSON字符串从函数A传递到函数B,而不是使用window.onload()或$(document).ready()。 我将我的JSON字符串存储到本地存储,并将用户引导到b.html。然后函数B将读取本地存储并直接处理数据。