使用Dom Document和Xpath计算特定列时遇到问题。
这是源文件的样子:
already some other tables and then...
<table><hr><tr><td><table>
<td align="center" colspan="1"><u><b>Contracts</b></u></td>
<tr><th>pos</th><th>player</th><th>age</th><th>year 1</th><th>year 2</th><th>year 3</th><th>year 4</th><th>year 5</th><th>year 6</th></tr>
<tr><td CLASS=tdp>PG</td><td CLASS=tdp><a href="JamesHarden7.htm">James Harden </a></td><td>27</td><td>20.00</td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td CLASS=tdp>PG</td><td CLASS=tdp><a href="TerryRozier1.htm">Terry Rozier </a></td><td>22</td><td>1.10</td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td CLASS=tdp>SG</td><td CLASS=tdp><a href="DannyGreen6.htm">Danny Green </a></td><td>29</td><td>2.60</td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td CLASS=tdp>SG</td><td CLASS=tdp><a href="MarcoBelinelli3.htm">Marco Belinelli </a></td><td>30</td><td>1.50</td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td CLASS=tdp>SF</td><td CLASS=tdp><a href="LuolDeng12.htm">Luol Deng </a></td><td>31</td><td>1.75</td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td CLASS=tdp>SF</td><td CLASS=tdp><a href="JeremyEvans9.htm">Jeremy Evans </a></td><td>28</td><td>7.50</td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td CLASS=tdp>PF</td><td CLASS=tdp><a href="JeffWithey8.htm">Jeff Withey </a></td><td>26</td><td>6.25</td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td CLASS=tdp>PF</td><td CLASS=tdp><a href="LavoyAllen11.htm">Lavoy Allen </a></td><td>27</td><td>1.50</td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td CLASS=tdp> C</td><td CLASS=tdp><a href="JonasValanciunas10.htm">Jonas Valanciunas </a></td><td>24</td><td>12.75</td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td CLASS=tdp> C</td><td CLASS=tdp><a href="RyanHollins4.htm">Ryan Hollins </a></td><td>31</td><td>1.50</td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td CLASS=tdp>SF</td><td CLASS=tdp><a href="K.J.McDaniels2.htm">K.J. McDaniels </a></td><td>23</td><td>1.50</td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td CLASS=tdp>PG</td><td CLASS=tdp><a href="BrianteWeber5.htm">Briante Weber </a></td><td>24</td><td>4.35</td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td CLASS=tdp>SF</td><td CLASS=tdp><a href="NicolasBrussino13.htm">Nicolas Brussino </a></td><td>23</td><td>1.00</td><td></td><td></td><td></td><td></td><td></td></tr>
</table></td><td><table>
...
我使用了这段代码,类似于我在这里找到的代码,但结果总是得到“0”。
$doc = new DOMDocument;
$doc->loadHTML('URL');
$xpath = new DOMXPath($doc);
// sum of cells of the sixth table (contracts), in the fourth column (year1), skipping the first row (ignore Year 1)
print $xpath->evaluate('sum(//table[6]//tr[position() > 1]/td[4])');
答案 0 :(得分:0)
在XPath中使用table[6]
等术语时可能会很困难,因为这依赖于整个文档结构。如果您可以选择<b>Contracts</b>
之类的内容作为您感兴趣的表格的一部分并搜索该表格,那就更好了。
所以你可以试试......
print $xpath->evaluate('sum(//table[td/u/b/.="Contracts"]/tr[position() > 1]/td[4])');
<强>更新强>
为了帮助解决它正在做的事情,你可以将其分解到各个级别并查看它返回的内容。要检查是否找到了表格,请使用...
$table = $xpath->query('//table[td/u/b="Contracts"]');
echo $doc->saveHTML($table[0]);
然后添加到它上面以查看它失败的地方。其中一个很大的困难可能是,因为你使用HTML,不好的问题是坏的HTML被转换成XML而且它可能会失去一些结构。