Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.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';s DOMDocument是否仅更改HTML文档的某些部分?_Php_Html_Dom_Html Parsing - Fatal编程技术网

如何使用PHP';s DOMDocument是否仅更改HTML文档的某些部分?

如何使用PHP';s DOMDocument是否仅更改HTML文档的某些部分?,php,html,dom,html-parsing,Php,Html,Dom,Html Parsing,假设我有一个表示HTML文档的字符串$str。它包含一个子字符串$substr,描述一些HTML DOM节点。我不知道或者可以很容易地匹配$substr,我只知道我在寻找什么DOM节点 我最终想用另一个字符串替换这个子字符串$replacement 我知道如何使用PHP的DOMDocument和Xpath查找和提取DOM节点,。。。 但是简单地修改DOMDocument,然后使用saveHTML或saveXML会出现以下问题: 它不仅会更改$substr(它会生成有效的HTML或XML,这可能

假设我有一个表示HTML文档的字符串
$str
。它包含一个子字符串
$substr
,描述一些HTML DOM节点。我不知道或者可以很容易地匹配
$substr
,我只知道我在寻找什么DOM节点

我最终想用另一个字符串替换这个子字符串
$replacement

我知道如何使用PHP的DOMDocument和Xpath查找和提取DOM节点,。。。 但是简单地修改DOMDocument,然后使用
saveHTML
saveXML
会出现以下问题:

  • 它不仅会更改
    $substr
    (它会生成有效的HTML或XML,这可能与输入字符串显著不同)

  • $replacement
    有严格的限制:它必须可以解析为(X)HTML/XML。但是假设我想拥有<代码> $Exchange =“如果你可以完全匹配子字符串和<代码> StryPosie<代码>,那么就这么做吧,我不认为这是一个坏的解决方案。当你不能精确匹配时,坏的解决方案包括在字符串级别替换(即用正则表达式)。。这不是选项。我相应地编辑了问题。当您将标记文档视为字符串时,它必须是一个RegExp。将其移植到DOMDocument中会将其解析为XML/HTML对象,这样您就不会操纵原始字符串。这是RegExps(我想还有Perl)所做的事情非常适合处理。但是解析器确实知道子字符串从何处开始和结束,从而导致某个节点!(他已经允许检索行号!)@JohannesGerer:不一定。如果输入被视为流并进行增量解析,那么解析器就没有理由为每个节点保留开始/结束偏移量。