【发布时间】:2019-07-31 22:49:12
【问题描述】:
我必须从 HTML 页面读取信息并将其传输到多个数组以进行进一步处理。 我使用 xpath 的方法并没有那么成功,以至于我无法访问我想要的数据。
正文部分包含一个行数不同的表格,如下例所示:
...
</tr>
<tr>
<td class="name" title="43PUS6551" datalabel="43PUS6551">
<span>43PUS6551</span>
</td>
<td datalabel="Internetnutzung" class="usage">eingeschränkt</td>
<td datalabel="Onlinezeit heute" class="bar time">
<span title="03:20 von 14:00 Stunden">
<span style="width:23.81%;"/>
</span>
</td>
<td datalabel="Zugangsprofil" class="profile">
<select name="profile:user6418">
<option value="filtprof1">Standard</option>
<option value="filtprof3">Unbeschränkt</option>
<option value="filtprof4">Gesperrt</option>
<option value="filtprof5334">Network</option>
<option value="filtprof5333" selected="selected">Stream</option>
<option value="filtprof4526">X-Box_One</option>
</select>
</td>
<td datalabel="" class="btncolumn">
<button type="submit" name="edit" id="uiEdit:user6418" value="filtprof5333" class="icon edit" title="Bearbeiten"/>
</td>
</tr>
<tr>
...
我需要一个数组,它包含第 2 行的 title 属性作为键,并从 <select> 部分(第 12 行)获取属性 name 作为值。
$devices = [
'43PUS6551' => 'profile:user6418'
…
]
我从这个开始,我能够接收到这个数组的密钥:
$dom = new DOMDocument();
$dom->preserveWhiteSpace = false;
$dom->loadHTML($response);
$xmlSite = simplexml_import_dom($dom);
$devices = [];
$rows = $xmlSite->xpath('//tr/td[@title=@datalabel]');
foreach ($rows as $row) {
$key = utf8_decode((string)$row->attributes()['title']);
但现在我正在努力获得指定值。我尝试了不同的方法:向上使用parent 并返回到节点<select> 或使用following-sibling。但是我太愚蠢了,无法正确使用 xpath 合成器。
如果我做到了,我需要一个数组,其中包含 <select> 部分(第 12 行)中的属性 name 作为键和 <option> 部分中的属性 value 也是 selcted价值。
$filters = [
'profile:user6418' => 'filtprof5333'
…
]
最后,我需要一个包含来自<option> 部分的数据的数组(出现在每一行中):
$profiles = [
'Standard' => 'filtprof1',
'Unbeschränkt' => 'filtprof3,
…
'X-Box-One' => 'filtprof4526',
]
任何有关propper xpath-hints的帮助将不胜感激
【问题讨论】:
-
PHP DomDocument 可能就是您要找的。span>
-
我可以尝试没有 PHP DOMDocument 的 xpath 吗?
-
好吧,这取决于你的代码,虽然你没有在这里放任何代码。看看这个答案,可能会有所帮助Difference between simplexml and Dom