如何使用PHP';s DOMDocument是否仅更改HTML文档的某些部分?
假设我有一个表示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,这可能
$str
。它包含一个子字符串$substr
,描述一些HTML DOM节点。我不知道或者可以很容易地匹配$substr
,我只知道我在寻找什么DOM节点
我最终想用另一个字符串替换这个子字符串$replacement
我知道如何使用PHP的DOMDocument和Xpath查找和提取DOM节点,。。。
但是简单地修改DOMDocument,然后使用saveHTML
或saveXML
会出现以下问题:
- 它不仅会更改
(它会生成有效的HTML或XML,这可能与输入字符串显著不同)$substr
有严格的限制:它必须可以解析为(X)HTML/XML。但是假设我想拥有<代码> $Exchange =“如果你可以完全匹配子字符串和<代码> StryPosie<代码>,那么就这么做吧,我不认为这是一个坏的解决方案。当你不能精确匹配时,坏的解决方案包括在字符串级别替换(即用正则表达式)。。这不是选项。我相应地编辑了问题。当您将标记文档视为字符串时,它必须是一个RegExp。将其移植到DOMDocument中会将其解析为XML/HTML对象,这样您就不会操纵原始字符串。这是RegExps(我想还有Perl)所做的事情非常适合处理。但是解析器确实知道子字符串从何处开始和结束,从而导致某个节点!(他已经允许检索行号!)@JohannesGerer:不一定。如果输入被视为流并进行增量解析,那么解析器就没有理由为每个节点保留开始/结束偏移量。$replacement