Java XQuery表达式-屏幕抓取-Saxon/JTidy

Java XQuery表达式-屏幕抓取-Saxon/JTidy,java,xml,xpath,xquery,saxon,Java,Xml,Xpath,Xquery,Saxon,我正在开发一个使用Jtidy/Saxon的javawebscraper。整洁的解析DOM与XQuery表达式一起发送到Saxon以提取数据。我在使用XQuery表达式时遇到困难 该网站是。我想提取所有表数据,必须使用XQuery来处理旧系统 基本上,我想要的是在这个XPath/*[@id=“mainDiv”]/div/table/tbody 返回tr标记 在每个tr 返回前6个标签1、2、3、4、5、6中的文本 到目前为止我想到的是 for $tr in //table/tbody fo

我正在开发一个使用Jtidy/Saxon的javawebscraper。整洁的解析DOM与XQuery表达式一起发送到Saxon以提取数据。我在使用XQuery表达式时遇到困难

该网站是。我想提取所有表数据,必须使用XQuery来处理旧系统

基本上,我想要的是在这个XPath
/*[@id=“mainDiv”]/div/table/tbody

返回
tr
标记 在每个
tr
返回前6个标签1、2、3、4、5、6中的文本

到目前为止我想到的是

for $tr in //table/tbody
    for $row in $tr/child::tbody/child::tr
        return <tr><td>{data($row/td[1])}</td>
            <td>{data($row/td[1])}</td>
            <td>{data($row/td[2])}</td> 
            <td>{data($row/td[3])}</td>
            <td>{data($row/td[4])}</td>
            <td>{data($row/td[6])}</td>
用于//table/tbody中的$tr
对于$tr/child::tbody/child::tr中的$row
返回{data($row/td[1])}
{data($row/td[1])}
{data($row/td[2])}
{data($row/td[3])}
{data($row/td[4])}
{data($row/td[6])}
我的语法显然是错误的,我正在尝试学习XQuery,但发现这个网站与教程示例XML有很大的不同。
如果有人能帮忙,我们将不胜感激

该网站的HTML无效可能对您没有帮助,例如:

<table align="center" width="1024px">
    <tr>
        <td align="center" ><div id="mainDiv"><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
</head>
<body>
<table>
我使用EXPath HTTP客户机检索HTML并将其整理成XML,因此以下内容对我很有用:

import module namespace http = "http://expath.org/ns/http-client";
declare namespace h = "http://www.w3.org/1999/xhtml";

for $tr in http:send-request(<http:request href="http://www.pacra.com.pk/reports.php" method="get"/>)[2]/h:html/h:html[2]/h:body/h:div/h:table/h:tr
return
    <tr>{
        $tr/h:td[position() le 6]
    }</tr>
导入模块命名空间http=”http://expath.org/ns/http-client";
声明命名空间h=”http://www.w3.org/1999/xhtml";
对于http:send-request()[2]/h:html/h:html[2]/h:body/h:div/h:table/h:tr中的$tr
返回
{
$tr/h:td[位置()le6]
}

非常感谢,通过您的示例,我可以编写自己的版本,而无需使用EXPath HTTP客户端。正是我需要的。
import module namespace http = "http://expath.org/ns/http-client";
declare namespace h = "http://www.w3.org/1999/xhtml";

for $tr in http:send-request(<http:request href="http://www.pacra.com.pk/reports.php" method="get"/>)[2]/h:html/h:html[2]/h:body/h:div/h:table/h:tr
return
    <tr>{
        $tr/h:td[position() le 6]
    }</tr>