gpt4 book ai didi

php - 使用简单 Html dom 解析器进行 Html 解析

转载 作者:行者123 更新时间:2023-12-04 14:58:35 25 4
gpt4 key购买 nike

我正在使用简单的 html dom 解析器来解析一些 html。

我有一个像这样的html

<span class="UIStory_Message">
Yeah, elixir of life!<br/>
<a href="asdfasdf">
<span>asdfsdfasdfsdf</span>
<wbr/>
<span class="word_break"/>
61193133389&ref=nf
</a>
</span>

我的代码是

$storyMessageNodes    = $story->find('span.UIStory_Message');
$storyMessage = strip_tags($storyMessageNodest->innertext);

我想在“UIStory_Message”范围内获取文本。即,“是的, Elixir !”。

但是上面的代码给了我整个跨度内的整个文本。即,“是的, Elixir !asdfsdfasdfsdf 61193133389&ref=nf”

我如何编码才能只给出“是的, Elixir !” ??

最佳答案

我已经编写了一种方法来删除获取的 DOM 节点中不需要的元素,我已经联系了作者,但是 simple dom 已经两年没有活跃了,所以我怀疑他是否会将其包含在发行版中。这是:

/**
* remove specified nodes from selected dom
*
* @param string $selector
* @param int|array (optional) possible values include:
* + positive integer - remove first denoted number of elements
* + negative integer - remove last denoted number of elements
* + array of ones and zeroes - remove the respective matches that equal to one
*
* eg.
* // will remove first two images found in node
* $dom->removeNodes('img',2);
*
* // will remove last two images found in node
* $dom->removeNodes('img',-2);
*
* // will remove all but the third images found in node
* $dom->removeNodes('img',array(1,1,0,1));
*
* [!!!] if there are more matches found than elements in array, the last array member will be used for processing
*
* eg.
* // will remove second and every following image
* $dom->removeNodes('img',array(0,1));
*
* // will remove only the second image
* $dom->removeNodes('img',array(0,1,0));
*
* @return simple_html_dom_node
*/
public function removeNodes($selector, $limit = NULL)
{
$elements = $this->find($selector);
if ( empty($elements) ) return $this;


if ( isset($limit) && is_int( $limit ) && $limit < 0 ) {
$limit = abs( $limit );
$elements = array_reverse( $elements );
}

foreach ( $elements as $element ) {

if ( isset($limit) ) {

if ( is_array( $limit ) ) {
$current = current( $limit );
if ( next( $limit ) === FALSE ) {
end( $limit );
}
if ( !$current ) {
continue;
}
} else {
if ( --$limit === -1 ) {
return $this;
}
}
}

$element->outertext = '';

}

return $this;
}

将其放入 simple_html_dom_node 类或扩展它的类中。在提问者的情况下,你可以像这样使用它:

$storyMessageNodes = $story->find('span.UIStory_Message');
$storyMessage = $storyMessageNodes[0]->removeNodes('a')->plaintext

关于php - 使用简单 Html dom 解析器进行 Html 解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1956850/

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