Проблема с Xpath и HTML Cleaner, данные не возвращаются - PullRequest
0 голосов
/ 15 августа 2010

новое для сообщества. я не спал всю ночь, пытаясь конкретизировать основную систему чтения html, которая лежит в основе функциональности моего приложения. Я мог бы действительно использовать свежую пару глаз на этом.

Проблема: при попытке вернуть строку, которая будет отображаться в домашней активности моего приложения, я столкнулся с проблемой, при которой я почти уверен, что данные были взяты правильно, очищены в XML с помощью «Html Cleaner» (http://htmlcleaner.sourceforge.net/), и вытащил через Jaxen (opensource Xpath), результат должен отображать некоторый текст. Проблема, конечно, несмотря на мои усилия, мне еще предстоит выяснить, почему это не так. Мой код следует ниже.

В качестве теста я пытаюсь извлечь слово "карты" из домашней страницы http://www.google.com, которая находится внутри тега с гиперссылкой "http://maps.google.com/maps?hl=en&tab=wl" (которую я использую для уникальной определить тег):

public class home extends Activity {

  TextView text1;


  //** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState)
  {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.main);

   text1 = (TextView)findViewById(R.id.text1);
   text1.setText(LoadHTMLFromURL("http://www.google.com"));
  }



  private String LoadHTMLFromURL(String url)
  {
   try
   {
    // Load data from URL     
     InputStream is = (InputStream) new URL(url).getContent(); //generate
     BufferedReader reader = new BufferedReader(new InputStreamReader(is));
     StringBuilder stringBuilder = new StringBuilder();
     String line = null;

     while ((line = reader.readLine()) != null) 
     {
      stringBuilder.append(line + "");
     }
     is.close();

     String HTMLout = stringBuilder.toString();

     // Clean up HTML input.
     //Initialize HTML Cleaner.
     HtmlCleaner cleaner = new HtmlCleaner();

     // This next line Cleans the html and exports it to a Tagnode named "node"
     TagNode node = cleaner.clean(HTMLout);

     // This is the xpath parsing info
     String SearchTerm = "//a[@href='http://maps.google.com/maps?hl=en&tab=wl']";


     Object[] info_nodes = node.evaluateXPath(SearchTerm);

     TagNode info_node = (TagNode) info_nodes[0];
              String info = info_node.getChildren().iterator().next().toString().trim();

              return info;
   }

   catch (Exception e) 
   {
    System.out.println( "Inside: home.LoadHTMLFromURL()" + "Exc="+e);
    return null;
   }

  }
 }

Я прошу прощения за беспорядок и отсутствие аккуратности в коде, все еще программист среднего и низкого уровня в стадии «учись, как ты» моей способности. Любой совет приветствуется.

примечание: я запустил строку, содержащую простой ручной XML, чтобы проверить, будет ли он читать информацию, и он отлично работал, но не на xml, сгенерированном из html-страниц.

1 Ответ

0 голосов
/ 16 августа 2010

Хорошо, я думаю, что проблема была в моем поисковом запросе.мой термин xpath был напечатан неправильно.

...