php – 如何通过使用xpath和domdocument来切断内部html的一部分并将其存储为html字符串?

我想切断html的一些部分,我可以通过使用XPath和DomDocument来解决它,但问题是我需要结果作为HTML代码字符串.通常我会使用reg. EXPR.为此,但我不想做一个复杂的搜索模式,将标记的开头和结尾.

这是示例输入:

some html code before
<div>this <b>is</b> what I want</div>
some html after

输出

<div>this <b>is</b> what I want</div>

我试过这样的事情:

 subject = 'some html code before
<div>this <b>is</b> what I want</div>
some html after';

$doc = new DOMDocument();                   
$doc->loadHTML($subject);
$xpath = new DOMXpath($doc);
$result = $xpath->query("//div/*");
echo $result->saveHTML();

但我只得到错误
    调用未定义的方法DOMNodeList :: saveHTML()

有没有人知道如何使用DomDocument和XPath将结果作为html字符串?

解决方法:

试试这个:

$subject = 'some html code before
<div>this <b>is</b> what I want</div>
some html after';

$doc = new DOMDocument();                   
$doc->loadHTML($subject);
$xpath = new DOMXpath($doc);
$result = $xpath->query("//div");
echo $doc->saveHTML($result->item(0)); //echoes what you want :)

saveHTML函数属于DOMDocument对象,您不能直接在节点上调用它(更不用说NodeList,这是查询返回的内容),但您可以做的是将节点作为参数传递给它.

此外,您的查询错误的:您想要的是div元素(即// div),而不是它的子元素(// div / *).

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...