PHP DOM/XPath

let*_*ngo 1 php xpath dom

希望对于之前已经完成它的人来说应该是一个简单的问题!

我有一个表格格式的旧Web文档列表,其中包含大量的联系人详细信息.到目前为止我所管理的是创建一个PHP脚本来解析XHTML文档并提取旧客户端联系人详细信息.

文档格式的示例:

<tr>
  <td bgcolor="#CCCCCC" valign="top"><a href="#" class="details">Indigo Blue 123</a></td>
  <td bgcolor="#CCCCCC"></td>
  <td bgcolor="#CCCCCC" align="top"><font class="details">123 Blue House</font></td>
  <td bgcolor="#CCCCCC"></td>
  <td bgcolor="#CCCCCC" valign="top"></td>
  <td bgcolor="#CCCCCC"></td>
  <td bgcolor="#CCCCCC" align="top"></td>
  <td bgcolor="#CCCCCC"></td>
  <td bgcolor="#CCCCCC" valign="top"><font class="details">Hanley</font></td>
  <td bgcolor="#CCCCCC"></td>
  <td bgcolor="#CCCCCC" valign="top"></td>
  <td bgcolor="#CCCCCC"></td>
  <td bgcolor="#CCCCCC" valign="top"><font class="details">ST13 4SN</font></td>
  <td bgcolor="#CCCCCC"></td>
  <td bgcolor="#CCCCCC" valign="top"><font class="details">Stoke on Trent</font></td>
  <td bgcolor="#CCCCCC"></td>
  <td bgcolor="#CCCCCC" valign="top"><font class="details">01875 322511</font></td>
  <td bgcolor="#CCCCCC"></td>
  <td bgcolor="#CCCCCC" valign="top"></td>
  <td bgcolor="#CCCCCC"></td>
  <td bgcolor="#CCCCCC" valign="top"><a href="http://www.indigoblue123.org.uk" target="_blank" class="details">www.indigoblue123.org.uk</a></td>
  <td bgcolor="#CCCCCC"></td>
</tr>
Run Code Online (Sandbox Code Playgroud)

我需要做的是将所有这些联系人细节解析成一个数组.我不确定如何完成的一些事情是抓住空块为空数组条目(即地址2和地址3将为空白,但我需要知道这一点)以及从<a>..</a>块中获取网址.

到目前为止,我已经确定所有填充数据都有class=details某种形式.但是,正如我之前提到的,我不确定实现整体结果的最佳方法是什么.我有不同的文件大约有20-40个条目.

到目前为止,我已经掌握了基本知识:

<?php
  print '<pre>';
  $html = file_get_contents('old-contacts.xhtml');

  // Create new DOM object:
  $dom = new DomDocument();

  // Load HTML code:
  $dom->loadHTML($html);

  $xpath = new DOMXPath($dom);
  $details = $xpath->query("//table/tbody/tr[td/font/@class = 'details']");

  for ($i = 0; $i < $details->length; $i++) {
    $data[$i]['data'] = $details->item($i)->nodeValue;
    echo $data[$i]['data'];
  }
  print '</pre>';
?>
Run Code Online (Sandbox Code Playgroud)

任何帮助都会很棒!

谢谢

net*_*der 8

我相信你正在寻找这样的东西:

$nodes = $xpath->query('//table/tbody/tr/td[@align="top"] | 
                        //table/tbody/tr/td[@valign="top"]');

$data = array();
foreach ($nodes as $node) {
    $data[] = $node->textContent;
}
Run Code Online (Sandbox Code Playgroud)

这会给你:

Array
(
    [0] => Indigo Blue 123
    [1] => 123 Blue House
    [2] => 
    [3] => 
    [4] => Hanley
    [5] => 
    [6] => ST13 4SN
    [7] => Stoke on Trent
    [8] => 01875 322511
    [9] => 
    [10] => www.indigoblue123.org.uk
)
Run Code Online (Sandbox Code Playgroud)