Php 使用简单的HTML DOM解析器检索文本节点
我对简单的HTMLDOM解析器很陌生。我想从以下HTML中获取子元素:Php 使用简单的HTML DOM解析器检索文本节点,php,xpath,simple-html-dom,Php,Xpath,Simple Html Dom,我对简单的HTMLDOM解析器很陌生。我想从以下HTML中获取子元素: <div class="article"> <div style="text-align:justify"> <img src="image.jpg" title="image"> <br> <br> "Text to grab" <div>......</div> <br><
<div class="article">
<div style="text-align:justify">
<img src="image.jpg" title="image">
<br>
<br>
"Text to grab"
<div>......</div>
<br></br>
................
................
</div>
</div>
但它不起作用。知道如何解决这个问题吗?这里不需要简单的html\u dom。它可以用和来完成。两者都是PHP核心的一部分
例如:
// your sample data
$html = <<<EOF
<div class="article">
<div style="text-align:justify">
<img src="image.jpg" title="image">
<br>
<br>
"Text to grab"
<div>......</div>
<br></br>
................
................
</div>
</div>
EOF;
// create a document from the above snippet
// if you are loading from a remote url use:
// $doc->load($url);
$doc = new DOMDocument();
$doc->loadHTML($html);
// initialize a XPath selector
$selector = new DOMXPath($doc);
// get the text node (also text elements in xml/html are nodes
$query = '//div[@class="article"]/div/br[2]/following-sibling::text()[1]';
$textToGrab = $selector->query($query)->item(0);
// remove newlines on start and end using trim() and output the text
echo trim($textToGrab->nodeValue);
这里不需要简单的html dom。它可以用和来完成。两者都是PHP核心的一部分
例如:
// your sample data
$html = <<<EOF
<div class="article">
<div style="text-align:justify">
<img src="image.jpg" title="image">
<br>
<br>
"Text to grab"
<div>......</div>
<br></br>
................
................
</div>
</div>
EOF;
// create a document from the above snippet
// if you are loading from a remote url use:
// $doc->load($url);
$doc = new DOMDocument();
$doc->loadHTML($html);
// initialize a XPath selector
$selector = new DOMXPath($doc);
// get the text node (also text elements in xml/html are nodes
$query = '//div[@class="article"]/div/br[2]/following-sibling::text()[1]';
$textToGrab = $selector->query($query)->item(0);
// remove newlines on start and end using trim() and output the text
echo trim($textToGrab->nodeValue);
如果它总是在同一个地方,你可以做:
$html->find('.article text', 4);
如果它总是在同一个地方,你可以做:
$html->find('.article text', 4);
这将有助于为你的代码提供一些上下文,而不仅仅是一条线……你得到了什么错误?你想从哪个文本中获取文本?不幸的是,简单的HTML DOM解析器不把文本看作是一个节点,所以它不能正常工作。你可以尝试使用Fix'文本,但是要知道你会有空行,因为它会有助于你的代码有一些上下文,而不仅仅是一条线……你得到了什么错误?你想从哪个文本中获取文本?不幸的是,简单的HTML DOM解析器不把文本看作是一个节点,所以不会工作。您可以尝试使用find'text',但请注意,您将有空行,因为……这里不需要简单的html dom,我很好奇为什么要使用它,应该在哪里使用它=@Enessay simple_html_dom是在PHP4时代开发的。PHP4没有内置的XPath支持。我明白了,这回答了我很久以来一直在问自己的一个问题。。。那么新的内置PHPDOM可以完全取代它吗?如果是这样的话,我很好奇为什么它仍然被广泛使用:/我没有使用它:而且我也不会鼓励任何人在新项目中使用它。虽然它在以前是一个很棒的库,但新的内置XPath类要快得多。我猜这是一个如此伟大的项目,仍然有这么多的文档,所以noobies可能认为它仍然是首选解决方案。哈哈,我是这些noobies xD中的一员。。。非常感谢这些答案,在这里你不需要简单的html,我很好奇为什么要用它,在哪里用它=@Enessay simple_html_dom是在PHP4时代开发的。PHP4没有内置的XPath支持。我明白了,这回答了我很久以来一直在问自己的一个问题。。。那么新的内置PHPDOM可以完全取代它吗?如果是这样的话,我很好奇为什么它仍然被广泛使用:/我没有使用它:而且我也不会鼓励任何人在新项目中使用它。虽然它在以前是一个很棒的库,但新的内置XPath类要快得多。我猜这是一个如此伟大的项目,仍然有这么多的文档,所以noobies可能认为它仍然是首选解决方案。哈哈,我是这些noobies xD中的一员。。。非常感谢你的回答