2014-03-24 58 views
1

我在使用XPath创建INSERT语句时遇到了问题。这里是我的表:XPath。确定刮表的行

<table> 
    <tr> 
    <td class="messagecellbody">row1 cell1</td> 
    <td class="messagecellbody">row1 cell2</td> 
    <td class="messagecellbody">row1 cell3</td> 
    </tr> 
    <tr> 
    <td class="messagecellbody">row2 cell1</td> 
    <td class="messagecellbody">row2 cell2</td> 
    <td class="messagecellbody">row2 cell3</td> 
    </tr> 
</table> 

和输出在理想情况下是这样的:

INSERT INTO database_table(列1,列2,栏3)VALUES( 'ROW1小区1', 'ROW1小区2', 'ROW1小区3' ); INSERT INTO database_table(column1,column2,column3)VALUES('row2 cell1','row2 cell2','row2 cell3');

我使用的代码是这样的:

$my_xpath_query = "//table//td[contains(@class, 'messagecellbody')]"; 
$result_rows = $xpath->query($my_xpath_query); 

foreach ($result_rows as $result_object) { 
    echo "'" . $result_object->nodeValue . "'"; 
} 

此正确地找到的每个,但输出是所有6个细胞的细胞内容物。我不知道如何在每一行上打破它(所以我可以回声'INSERT INTO database_table'等)。

如果我插入一个额外的参数,我可以按列号过滤它,例如,以下将给我第一列

$my_xpath_query = "//table//td[contains(@class, 'messagecellbody')][1]"; 

但问题仍然不知道何时行和另一个开始。没有这个,很难创建我的INSERT语句。

回答

0

也许尝试在您的Xpath搜索中获取TR行作为单独的对象。是否有任何TR组件,你不想包含哪些子组件?

然后您将能够获得这些对象的子节点(即您正在查找的TD元素)。

喜欢的东西:

 
$my_xpath_query = "//table//tr"; 
$result_rows = $xpath->query($my_xpath_query); 

foreach ($result_rows as $result_object) { 
    foreach($result_object->childNodes as $td) { 
     echo "'" . $td->nodeValue . "'"; 
    } 
} 

我没有测试过 - 但我认为这样的事情会解决你的问题。

+0

当然!去tr水平而不是td。我能够在页面上选择正确的表格,然后使用$ my_xpath_query =“// table [contains(@class,'bbstable')] // tr [position()]来排除我不需要的前两行。 > 2]“;谢谢! – user3456740