gpt4 book ai didi

Android,正确使用 HTMLCleaner

转载 作者:行者123 更新时间:2023-11-29 21:44:59 28 4
gpt4 key购买 nike

我知道我们基本上应该尝试在这里做我们自己的事情,这里不是提出请求的地方,但我真的很讨厌不得不从 Html 中读取内容,我真的不明白这是怎么回事。

所以,我将奖励 150 点的赏金(并不是说我便宜,我只是不能做更多 :( ) 如果我能得到一些好的帮助,或者至少被指向正确的方向一些示例代码。

我想要完成什么?

  • 我正在尝试从以下位置获取最新消息 Nasa page .
  • 我打算在 ListView 上显示这个新闻,当然,ListView 开始显示的内容很少,只有通过上面页面可用的数据,这里是快速 mock-up .

就是这样,当用户单击链接时,他们将被带到显示完整 article 的不同 fragment 。 ,一旦我完成了这件事,我会在稍后弄清楚如何得到它。

因此,我尝试将 HtmlCleaner 与以下位一起使用:

private class CleanUrlTask extends AsyncTask<Void, Void, Void> {

@Override
protected Void doInBackground(Void... params) {
try {
//try cleaning the nasa page.
mNode = mCleaner.clean(mUrl);
} catch (Exception e) {
Constants.logMessage("Error cleaning file" + e.toString());
}
return null;
}

@Override
protected void onPostExecute(Void result) {
try {
//For now I am just writing to an xml file to sort of read through
//God is HTML code ugly.
new PrettyXmlSerializer(mProps).writeToFile(
mNode, FILE_NAME, "utf-8"
);
} catch (Exception e) {
Constants.logMessage("Error writing to file: " + e.toString());
}
}
}

但是从那里开始,我几乎迷路了。这是 XML output顺便提一句。然而,我确实注意到某些 tag hierarchy 上有某种重复。对于每篇文章内容,它似乎是这样的:左边是图片和文章链接右边是文章标题和预览内容

Class Name Hierarchy

因此,如果有人愿意帮助我弄清楚如何以某种方式获取内容,我将不胜感激。

请注意,作为 2013 年 NASA 国际太空应用挑战赛的一部分,该项目用于教育目的,更多信息 here .

作为奖励问题,同一个链接包含当前、 future 和过去探险的信息,包括当前成员,对于探险的每个成员,都有一个指向他们的生物页面的链接。

这些标签似乎不是重复的,但名称似乎是预设的和不变的,你有“tab1”、“tab2”和“tab3”等等。

我想从中得到的是:

  • 远征编号和日期。
  • 远征队成员
  • 每个成员(member)简历的链接。

再次感谢大家的支持,非常感谢。

最佳答案

所以显然我需要做的就是弄清楚如何使用 XPATH为了从 XML 输出中获取数据。

所以基本上,XPATH 的想法是您可以使用 XML 获取任何节点,在我的例子中,如您在上图中所见,我想获取非常具体的信息。

这是文章链接的 XPATH:

public static final String XPATH_ARTICLE_LINKS = 
"//div[@class='landing-slide']/div[@class='landing-slide-inner']/div[@class='fpss-img_holder_div_landing']/div[@id='fpss-img-div_466']/a/@href";

//div[@class='landing-slide'] 意味着我正在寻找类名为 landing-slide< 的任何 div/strong> 不管('//'声明)它们在文档中的位置。从那里开始,我只是进一步进入项目的层次结构,最终获得 href 属性的值(属性通过 '@' 字符指向)。

现在我们有了 XPATH,我们只需要将这个值传递给 HTML 清理器。我通过 AsyncTask 执行此操作,请记住这不是最终代码,但它肯定会获取我想要的信息。

首先,使用的 XPATH:

private class News {
static final String XPATH_ARTICLE_LINKS =
"//div[@class='landing-slide']/div[@class='landing-slide-inner']/div[@class='fpss-img_holder_div_landing']/div[@id='fpss-img-div_466']/a/@href";
static final String XPATH_ARTICLE_IMAGES =
"//div[@class='landing-slide']/div[@class='landing-slide-inner']/div[@class='fpss-img_holder_div_landing']/div[@id='fpss-img-div_466']/a/img/@src";
static final String XPATH_ARTICLE_HEADERS =
"//div[@class='landing-slide']/div[@class='landing-slide-inner']/div[@class='landing-fpss-introtext']/div[@class='landing-slidetext']/h1/a";
static final String XPATH_ARTICLE_DESCRIPTIONS =
"//div[@class='landing-slide']/div[@class='landing-slide-inner']/div[@class='landing-fpss-introtext']/div[@class='landing-slidetext']/p";
}

现在是 AsyncTask:

private class CleanUrlTask extends AsyncTask<Void, Void, Void> {

@Override
protected Void doInBackground(Void... params) {
try {
//try cleaning the nasa page. (Root Node)
mNode = mCleaner.clean(mUrl);

//Get all of the article links
Object[] mArticles = mNode.evaluateXPath(News.XPATH_ARTICLE_LINKS);
//Get all of the image links
Object[] mImages = mNode.evaluateXPath(News.XPATH_ARTICLE_IMAGES);
//Get all of the Article Titles
Object[] mTitles = mNode.evaluateXPath(News.XPATH_ARTICLE_HEADERS);
//Get all of the Article Descriptions
Object[] mDescriptions = mNode.evaluateXPath(News.XPATH_ARTICLE_DESCRIPTIONS);

Constants.logMessage("Found : " + mArticles.length + " articles");
//Value containers
String link, image, title, description;

for (int i = 0; i < mArticles.length; i++) {
//The Nasa Page returns link that are often not fully qualified URL, so I need to append the prefix if needed.
link = mArticles[i].toString().startsWith(FULL_HTML_PREFIX)? mArticles[i].toString() : NASA_PREFIX + mArticles[i].toString();
image = mImages[i].toString().startsWith(FULL_HTML_PREFIX)? mImages[i].toString() : NASA_PREFIX + mImages[i].toString();
//On the previous two items we were getting the attribute value
//Here, we actually need the text inside the actual element, and so we want to cast the object to a TagNode
//The TagNode allows to extract the Text for the supplied element.
title = ((TagNode)mTitles[i]).getText().toString();
description = ((TagNode)mDescriptions[i]).getText().toString();
//Only log the values for now.
Constants.logMessage("Link to article is " + link);
Constants.logMessage("Image from article is " + image);
Constants.logMessage("Title of article is " + title);
Constants.logMessage("Description of article is " + description);

}
} catch (Exception e) {
Constants.logMessage("Error cleaning file" + e.toString());
}
return null;
}

如果有人像我一样迷路,我希望这可以为您的道路提供一些启示。

关于Android,正确使用 HTMLCleaner,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16113530/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com