如何使用QueryPath更新变量中包含的HTML代码

时间:2015-02-18 13:21:39

标签: php querypath

我正在将一些内容迁移到Drupal,并希望使用QueryPath来更改

中的图像引用
<img src="example.jpg">

<img src="/sites/default/files/images/example.jpg">

我从整个页面HTML中提取“main”div并将其放入变量($ mainContent)。然后我可以获取图像标签并更新它们。这一切都有效,但我无法弄清楚如何将更新的图像标记恢复到我的$ mainContent变量中。

这是我的代码:

$qp = qp($htmlCode); // full HTML page
$mainContent = $qp->top()->find('#main')->innerHTML(); // div containing main content

foreach (qp($mainContent, 'img') as $img) {
    $new_src = '/sites/default/files/images/' . $img->attr('src');
    $img->attr('src', $new_src);   // src attribute is updated

    $mainContent->XXXXX // ????? What to put here ????
}

在foreach循环中的第二行之后,$ img变量包含每个图像的更新的src属性。但是,我无法弄清楚将更新的图像标记折叠回$ mainContent变量所需的QueryPath语法。我应该使用普通的PHP“替换”函数来替换旧的标签吗? (我知道有很多方法可以做到,但我想以“正确”的方式做到这一点!)。

1 个答案:

答案 0 :(得分:2)

我自己想出来 - 发布答案以防将来可能对其他人有帮助。问题是,通过获得&#34; innerHTML&#34; $ mainContent的值,我把它设置为标量变量而不是QueryPath对象。

以下代码正确地将更改应用于变量的内容。

$qp = qp($htmlCode); // full HTML page
$mainContent = $qp->top()->find('#main'); // div containing main content

foreach ($mainContent->top()->find('img') as $img) {
    $new_src = '/sites/default/files/images/' . $img->attr('src');
    $img->attr('src', $new_src);   // src attribute is updated
}
$output = $mainContent->top()->find('#main')->innerHTML();

现在,$ output包含&#34; #main&#39;的HTML代码。格。