Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用简单的HTML DOM解析器检索文本节点_Php_Xpath_Simple Html Dom - Fatal编程技术网

Php 使用简单的HTML DOM解析器检索文本节点

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><

我对简单的HTMLDOM解析器很陌生。我想从以下HTML中获取子元素:

<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中的一员。。。非常感谢你的回答