2015-04-01 125 views
0

我是Jsoup的新手,我试图用下面的html解析一个网站,并在下面的html中检索文本输入的值,特别是我想要的“value = 14”在我的android应用程序的文本视图中显示该值(在这种情况下数字14)作为字符串。我尝试了多种方式,但它没有奏效,我只收到“null”。请举例说明。Jsoup解析HTML问题

<div id="PatientsCurrentlyInClinic" style="display: none"> <!-- Messages are shown when a link with these attributes are clicked: href="#messages" rel="modal" --> 

      <h3>Which clinic are you updating?</h3> 
      <form action="" method="get"> 
      <p> 
       <select name="patientclinicid" id="patientclinicid"><option value="2" selected>Location Two</option><option value="1">Location One</option><option value="3">Location Three</option></select>    </p> 



       <h4>How many patients are in the clinic?</h4> 
       <p> 
        To provide better service to your patients, please enter the current number of patients in your clinic. 
       </p> 
        <input class="text-input medium-input" type="text" id="small-input" name="patientsInClinic" value="14"/> 

        <p><input class="button" name="patients-clinic" type="submit" value="Update" /></p> 


      </form> 

     </div> <!-- End #messages --> 

我的尝试,让我“空”如下:

private class Title extends AsyncTask<Void, Void, Void> { 
    String name; 
    String value; 


    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     mProgressDialog = new ProgressDialog(HTML.this); 
     mProgressDialog.setTitle("Checking Database"); 
     mProgressDialog.setMessage("Loading..."); 
     mProgressDialog.setIndeterminate(false); 
     mProgressDialog.show(); 
    } 

    @Override 
    protected Void doInBackground(Void... params) { 
     try { 

      Document doc = Jsoup.connect(url).get(); 
      Elements inputElems =doc.select("input#small-input"); 
      for (Element inputElem : inputElems){ 
       name = inputElem.attr("name"); 
       value = inputElem.attr("value"); 
      } 
     } catch(Throwable t) { 
      t.printStackTrace(); 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     // Set title into TextView 
     TextView txttitle = (TextView) findViewById(R.id.showPatientNumber); 
     txttitle.setText(value); 
     mProgressDialog.dismiss(); 
    } 
} 
+0

做一些事情,问的问题。你可以通过google-ing找到一些很好的教程。 http://www.androidbegin.com/tutorial/android-basic-jsoup-tutorial/ – dare 2015-04-01 23:52:26

+0

我已经尝试谷歌这个解决方案,我已经拿出了上面的代码。再次感谢任何帮助。 – Manu 2015-04-01 23:56:33

回答

0

试试这个:

Elements inputElems =doc.select("input"); 
for (Element inputElem : inputElems){ 
    name = inputElem.attr("name").first(); 
    value = inputElem.attr("value").first(); 
} 
+0

我试过这个,但是它不能解决“first()”方法。任何想法我做错了什么?感谢您的努力! – Manu 2015-04-02 00:23:54

+0

我没有别的问题,只是要求提供更多信息或其他选项。尽管感谢您的领导。 – Manu 2015-04-02 01:39:23

0

我能够最终通过使用下面的代码获取的价值:

Element pInput = doc.select("input[id=small-input]").first(); 
      rPts = pInput.attr("value"); 

这就产生了null initial但在我添加了以下代码以获取身份验证Cookie后,我将该身份验证cookie传递到存储我的数据值的下一个网页,以及我尝试从中获取解析数据的位置,结果是成功的。

Document doc1 = res.parse(); 
      String sessionId = res.cookie("SESSIONID"); 



      Document doc = Jsoup.connect(url) 
        .cookie("SESSIONID", sessionId) 
        .get(); 
0

试试这个,

Elements inputElems =doc.select("input"); 
Iterator<Element> linksIt = inputElems .iterator(); 

while (linksIt.hasNext()) { 
    Element inputElem = linksIt.next(); 
    String id = inputElem.attr("id"); 

    if(id.equals("small-input")){ 
     name = inputElem.attr("name"); 
     value= inputElem.attr("value"); 
    } 
}