【问题标题】:Xpath and HTML Cleaner problem, no data returnedXpath 和 HTML Cleaner 问题,没有返回数据
【发布时间】:2011-03-30 02:50:48
【问题描述】:

社区新手。彻夜未眠,试图充实作为我的应用程序功能核心的底层 html 阅读系统。我真的可以用一双新鲜的眼睛看这个。

问题:在尝试返回要在我的应用程序的主页活动中显示的字符串时,我遇到了一个问题,我几乎可以肯定数据已正确获取,并通过“Html Cleaner”清理为 XML (http://htmlcleaner.sourceforge.net/),并通过 Jaxen (opensource Xpath) 提取结果应该显示一些文本。问题当然是,尽管我努力了,但我还没有弄清楚为什么它不会。我的代码如下。

作为测试,我试图从http://www.google.com 主页中提取单词“maps”,该主页位于带有超链接“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 的字符串,以测试它是否会读取信息,它运行良好,但不适用于从 html 网页生成的 xml。

【问题讨论】:

  • 只是一个建议——下次不要“通宵”,休息一下,睡一觉。到最后你会有一双清新的眼睛……
  • htmlCleaner 的结果是什么?请在您的问题中提供此 XML。
  • 此时我不确定如何输出更清洁的信息 TagNode node = cleaner.clean(HTMLout);如何正确地将标记节点转换为字符串?
  • 经过一些故障排除后,我确定了数据未返回的可能原因。 TagNode info_node = (TagNode) info_nodes[0]; 在代码中这一行之后的“return info;”在函数的末尾永远不会被调用。并且在 ddms "error: thread attach failed" 中抛出了这个错误

标签: android xml url xpath html-parsing


【解决方案1】:

好的,我相信问题出在我的搜索词上。我的 xpath 术语输入错误。

【讨论】:

    猜你喜欢
    • 2015-12-28
    • 2018-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-23
    • 1970-01-01
    • 2015-08-06
    相关资源
    最近更新 更多