gpt4 book ai didi

php - 如何通过 simplehtmldom 解析位于标签外部(标签之间)的文本片段?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:46:02 25 4
gpt4 key购买 nike

我正在使用 simplehtmldom解析 html,我被困在解析位于任何标签之外(但在两个不同标签之间)的纯文本:

<div class="text_small">
<b>Аdress:</b> 7 Hange Road<br>
<b>Phone:</b> 415641587484<br>
<b>Contact:</b> Alex<br>
<b>Meeting Time:</b> 12:00-13:00<br>
</div>

是否可以获取地址、电话、联系人、 session 时间这些值?我想知道是否有机会将 CSS 选择器传递给 nextSibling/previousSibling 函数...

foreach($html->find('div.text_small') as $div_descr) 
{
foreach($div_descr->find('b') as $b)
{
if ($b->innertext=="Аdress:") {//someaction
}
if ($b->innertext=="Phone:") { //someaction
}
if ($b->innertext=="Contact:") { //someaction
}
if ($b->innertext=="Meeting Time:") { //someaction
}
}
}

我应该用什么来代替“someaction”?

更新。是的,我没有编辑目标页面的权限。否则,值得吗? :)

最佳答案

可能有更简单的解决方案。 (也许使用 simple_html_dom 以外的东西)

我还没有找到合适的选择器,nextSibling() 只返回下一个兄弟元素。 (这有点奇怪。simple_html_dom_node 存储两个数组,$children 和 $nodes。文本节点在 $nodes 中但不在 $children 中。而 next_sibling() 对 $children 进行操作)。
但由于 $nodes 是 simple_html_dom_node 的公共(public)属性,因此您需要自己编写一些迭代器。

<?php
require_once 'simplehtmldom/simple_html_dom.php';
$html = str_get_html('<html><head><title>...</title></head><body>
<div class="text_small">
<b>Adress:</b> 9 Hange Road<br>
<b>Phone:</b> 999641587484<br>
<b>Contact:</b> Alex<br>
<b>Meeting Time:</b> 12:00-13:00<br>
</div>
<div class="text_small">
<b>Adress:</b> 8 Hange Road<br>
<b>Phone:</b> 888641587484<br>
<b>Contact:</b> Bob<br>
<b>Meeting Time:</b> 13:00-14:00<br>
</div>
</body></html>');

foreach($html->find('div.text_small') as $div) {
$result = parseEntry($div);
foreach($result as $r) {
echo "'$r[name]' - '$r[text]'\n";
}
echo "========\n";
}

function parseEntry(simple_html_dom_node $div) {
$result = array();
$current = null;
for($i=0; $i<count($div->nodes); $i++) {
if ( HDOM_TYPE_ELEMENT===$div->nodes[$i]->nodetype) {
if ( !is_null($current) ) {
$result[] = $current;
$current = null;
}
if ('b'===$div->nodes[$i]->tag) {
$current = array('name'=>$div->nodes[$i]->text(), 'text'=>'');
}
}
else if (HDOM_TYPE_TEXT===$div->nodes[$i]->nodetype && !is_null($current)) {
$current['text'] .= $div->nodes[$i]->text();
}
}
if ( !is_null($current) ) {
$result[] = $current;
}
return $result;
}

打印

'Adress:' - ' 9 Hange Road'
'Phone:' - ' 999641587484'
'Contact:' - ' Alex'
'Meeting Time:' - ' 12:00-13:00'
========
'Adress:' - ' 8 Hange Road'
'Phone:' - ' 888641587484'
'Contact:' - ' Bob'
'Meeting Time:' - ' 13:00-14:00'
========

在其他人找到更简单的解决方案之前,您可能希望以此为起点。

关于php - 如何通过 simplehtmldom 解析位于标签外部(标签之间)的文本片段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2629092/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com