Android XPath HTML解析,比如TFHpple(我有一个10行的Obj-C实现,可以';t翻译)
2天前,我编写了这个objective-c代码,从一个完全按照预期工作的网站中提取文本。现在我不知道如何在Android上实现这一点。Android真的很奇怪Android XPath HTML解析,比如TFHpple(我有一个10行的Obj-C实现,可以';t翻译),android,xml,xpath,html-parsing,Android,Xml,Xpath,Html Parsing,2天前,我编写了这个objective-c代码,从一个完全按照预期工作的网站中提取文本。现在我不知道如何在Android上实现这一点。Android真的很奇怪 每个人发布的某些XPath代码与HTML文件不兼容(只接受标准XML) JSoup(可以处理HTML)不能转换成Xpath 总而言之,我现在正在绕圈子 基本上,我需要的是从特定URL的html文件中获取//h2/a周围的元素请看一看我写的obj-c实现,它实际上有10行工作代码,但我想不出在Android中实现同样的功能的方法。 -(
- 每个人发布的某些XPath代码与HTML文件不兼容(只接受标准XML)
- JSoup(可以处理HTML)不能转换成Xpath
- 总而言之,我现在正在绕圈子
//h2/a
周围的元素请看一看我写的obj-c实现,它实际上有10行工作代码,但我想不出在Android中实现同样的功能的方法。
-(void)loadTutorials:(NSString*)startURLS {
NSURL *tutorialsUrl = [NSURL URLWithString:startURLS];
NSData *tutorialsHtmlData = [NSData dataWithContentsOfURL:tutorialsUrl];
TFHpple *tutorialsParser = [TFHpple hppleWithHTMLData:tutorialsHtmlData];
NSString *tutorialsXpathQueryString = @"//h2/a";
NSArray *tutorialsNodes = [tutorialsParser searchWithXPathQuery:tutorialsXpathQueryString];
NSString *podcastTitles[99];
int jjj=0;
for (NSString *string in tutorialsNodes) {
podcastTitles[jjj]=[[[tutorialsNodes[jjj] firstChild] content] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
NSLog(@"%@",podcastTitles[jjj]); //WORKING PERFECTLY FINE
jjj++;
}
}
让它工作起来,关键是坚持使用XPathFactory,但为它提供一个
HTMLCleaner
清理过的HTML。不幸的是,我找不到让我走上正轨的答案,所以今天没有学分,但希望我能再次偶然发现它
Idk这些行中有多少行是必需的,我永远不会清理这些代码,但这个块现在对我有用
HtmlCleaner cleaner = new HtmlCleaner();
CleanerProperties props = cleaner.getProperties();
props.setAllowHtmlInsideAttributes(true);
props.setAllowMultiWordAttributes(true);
props.setRecognizeUnicodeChars(true);
props.setOmitComments(true);
TagNode tagNode = new HtmlCleaner().clean(
websiteContent);
org.w3c.dom.Document doc = new DomSerializer(
new CleanerProperties()).createDOM(tagNode);
XPath xpath = XPathFactory.newInstance().newXPath();
NodeList titleNodes = (NodeList) xpath.evaluate("//h2/a",
doc, XPathConstants.NODESET);
System.out.println("iii"+titleNodes);
for(int i=0; i<titleNodes.getLength();i++){
System.out.println("t t t"+titleNodes.item(i).getTextContent()); //WORKING
}
HtmlCleaner cleaner=新的HtmlCleaner();
CleanerProperties props=cleaner.getProperties();
props.setAllowtmlinsideAttributes(true);
props.setAllowMultiWordAttributes(true);
道具。设置识别Unicodechars(真);
props.setomit注释(true);
TagNode TagNode=new HtmlCleaner().clean(
网站内容);
org.w3c.dom.Document doc=新的DomSerializer(
新的CleanerProperties()).createDOM(tagNode);
XPath=XPathFactory.newInstance().newXPath();
NodeList titleNodes=(NodeList)xpath.evaluate(“//h2/a”,
doc,XPathConstants.NODESET);
系统输出打印项次(“iii”+标题节点);
对于(int i=0;i