我需要处理多个文件,这些文件是使用某些malform HTML标记编写的非常旧的SHTML文件。
例如,给定页面将遵循此结构
<!--#include virtual="../includes/header.shtml"-->
<title>Welcome</title>
<div class="fudgeLeft">
<div class="mainContent">
<link rel="stylesheet" href="../css/style.css">
<img src="hockeyflag.jpg" alt="">
<p>text
<p>text
<p>more text
</div>
<!--#include virtual="../includes/footer.shtml"-->
header.shtml
包含HTML文档的开头标记,包括<body>
标记。 footer.shtml
包括结束</div>
,</body>
和</html>
。[老实说,我不知道原始开发者在构建这些页面时的想法(或吸烟)。]
无论如何,我编写了一个脚本,使用DOMDocument来清理这些页面,转换一个特定的标记,并将更新的文档保存为新文件。
我遇到的问题是新创建的文件发生了更多变化。
<!--#include virtual="../includes/header.shtml"--><title>Welcome</title><div class="fudgeLeft">
<div class="mainContent">
<link rel="stylesheet" href="../css/style.css" />
<img src="hockeyflag.jpg" alt="" />
<p>text</p>
<p>text</p>
<p>more text</p>
</div>
<!--#include virtual="../includes/footer.shtml"--></div>
所以我的问题是有没有办法配置DOMDocument以保留HTML格式的HTML格式?我的目标是只更改一个标记,但保留当前的丑陋文档。
我的剧本很长但很简短
$doc = new DOMDocument();
@$doc->loadHTMLFile('path-to-shtml-file', LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
// convert one tag
$doc->saveHTMLFile('path-to-new-shtml-file');
我正在运行PHP 7。