PHP简单HTML DOM解析器:插入HTML

时间:2012-10-11 21:07:35

标签: php dom

我正在尝试使用Simple HTML DOM Parser从页面B中提取一些html并将html代码插入当前页面。 (请温柔,我是一个PHP新手)

Page B html我的目标看起来像这样:     <div id="testdiv">B</div>

我需要在当前页面中插入相同的代码。

我的PHP在当前页面:

<?php
include_once '%resource(simple_html_dom.php)%';
$ret = Array();
$html = file_get_html('b.html');
$ret[] = $html->find('div[id=testdiv]', 0);
$ret->outertext = $ret->makeup() . $ret->innertext . '</div>';
echo $ret;
?>

我试图将它拼凑在一起,但仍然没有运气。我希望在查看当前页面时看到“B”,但我绝对需要所有的html编码也在那里;)
目前收到错误“在非对象上调用成员函数化妆()”

P.S。一旦运行,我可能需要一种方法来引入pg B上的css和js。

感谢你的帮助,比尔

更新代码:

<?php
include_once '%resource(simple_html_dom.php)%';
$html = file_get_html('b.html');
foreach($html->find('div[id=testdiv]') as $ret)
  echo $ret;
?>

所以现在我需要能够获得特定的css&amp;来自页面B的js文件,因此div中的任何内容都将正确呈现。这是一个例子Current Page如果您查看页面B的标题,将会有一个典型的css和js文件,名为b_files / stacks_page_page1.css&amp; b_files / stacks_page_page1.js

这些是我需要在当前页面中引用的文件,并根据需要更改相对路径。我还添加了一个文件夹中的页面C(B在根目录中是当前页面),因此路径会有所不同。我想将css文件组合在一起&amp; js文件在一起会很好,所以没有一堆dom调用。

总的来说,带来这些文件的代码是什么?

3 个答案:

答案 0 :(得分:1)

你正在获得“对非对象调用成员函数化妆()”,因为$ ret是一个数组而且没有一个名为“makeup()”的方法。

我不确定你想要做什么,但是这样的事情可能会让你更接近。我假设你有一些名为makeup()的函数产生一个字符串“&lt; div&gt;”:

未经测试

<?
php include_once '%resource(simple_html_dom.php)%';  
$html = file_get_html('b.html'); 
$ret = $html->find('div[id=testdiv]', 0)->innertext; 
$ret = makeup() . $ret . '</div>'; 

echo $ret; 
?> 

答案 1 :(得分:1)

代码存在许多问题。 $ret[]表示按下数组,但接下来就是调用对象方法的行,这就是你得到错误的原因。

修复该问题后,$ret->makeup不是根据API的有效方法(除非您已修改/扩展它)。我不确定您对$ret->outertext = $ret->makeup() . $ret->innertext . '</div>'的看法,但是如果您在输出中期望B

<?php
include_once 'simple_html_dom.php';
$html = file_get_html('b.html');
$ret = $html->find('div[id=testdiv]', 0);
if ($ret) {
    echo $ret->innertext;
}

答案 2 :(得分:1)

foreach($html->find('div[id=testdiv]') as $content)
    echo $content;

结果应为<div id="testdiv">B</div> 它将作为

显示在浏览器上
B

如果要显示代码:

foreach($html->find('div[id=testdiv]') as $content)
    echo "<xmp>".$content."</xmp>";

真实结果:<xmp><div id="testdiv">B</div></xmp>

然后在浏览器的显示屏上显示:

<div id="testdiv">B</div>