DOMDocument 避免初始 xml 标记
Posted
技术标签:
【中文标题】DOMDocument 避免初始 xml 标记【英文标题】:DOMDocument avoid initial xml tag 【发布时间】:2020-05-28 21:07:30 【问题描述】:问题:
如何避免 DOMDocument 创建初始 xml-tag?:
<?xml version="1.0"?>
想要的代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<title>My site</title>
</head>
<body>
</body>
</html>
使用 DOMDocument 生成的代码:
<?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>My site</title>
</head>
<body></body>
</html>
我的脚本:
<?php
/**
* Ref:
* https://***.com/questions/19482826/using-domdocument-to-create-elements-in-an-html-file
* https://www.php.net/manual/en/domimplementation.createdocumenttype.php
*/
// Creates an instance of the DOMImplementation class
$imp = new DOMImplementation;
// Doctype
$dtd = $imp->createDocumentType(
'html', '-//W3C//DTD XHTML 1.0 Transitional//EN', 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'
);
// Base document
$doc = $imp->createDocument("", "", $dtd);
$doc->formatOutput = true;
/**
* Construct tag skeleton.
*/
// [L-1]
$html=$doc->appendChild(
$doc->createElementNS("http://www.w3.org/1999/xhtml","html")
);
$html->setAttribute("lang", "en");
$html->setAttribute("xml:lang", "en");
$doc->appendChild($html);
// [L-2]
$head=$html->appendChild(
$doc->createElement('head')
);
// [L-3]
$title=$head->appendChild(
$doc->createElement(
'title',
"My site"
)
);
// [L-2]
$body=$html->appendChild(
$doc->createElement('body')
);
// Save
echo $doc->saveHTML();
$doc->save("auto_produced_xhtml.xhtml");
【问题讨论】:
无法复制:3v4l.org/OYLG4 @Nick Wiewing 在 AOM 和 Firefox 浏览器中的代码我可以看到初始的 xml 标记。运行上面的脚本,看到终端的输出,我没有看到 xml-tag。 幸运的是@kerbholz 想出来了... 【参考方案1】:您可以使用saveHTMLFile();
代替save()
来...另存为HTML 文件。替换
$doc->save("auto_produced_xhtml.xhtml");
与
$doc->saveHTMLFile("auto_produced_xhtml.xhtml");
https://www.php.net/manual/en/domdocument.savehtmlfile.php
【讨论】:
以上是关于DOMDocument 避免初始 xml 标记的主要内容,如果未能解决你的问题,请参考以下文章
DOMDocument-防止空标记//检索没有xml声明的节点
警告:DOMDocument::loadXML():需要开始标记,在实体中找不到“<”