![]() |
1
5
看一看 PHP's DOM 尤其是 DOMDocument::schemaValidate 和 DOMDocument::validate . DOMDocument::validate的示例相当简单:
|
![]() |
2
3
如果字符串中有dtd,则可以使用 data wrapper 对于dtd:
|
![]() |
3
3
我对原始问题的解释是,我们有一个“机载”XML文件,我们想根据“机载”DTD文件对其进行验证。以下是我将如何实现Soren和PayamRWD在评论中表达的“在DOCTYPE元素内插入本地DTD”的想法:
public function validate($xml_realpath, $dtd_realpath=null) { $xml_lines = file($xml_realpath); $doc = new DOMDocument; if ($dtd_realpath) { // Inject DTD inside DOCTYPE line: $dtd_lines = file($dtd_realpath); $new_lines = array(); foreach ($xml_lines as $x) { // Assume DOCTYPE SYSTEM "blah blah" format: if (preg_match('/DOCTYPE/', $x)) { $y = preg_replace('/SYSTEM "(.*)"/', " [\n" . implode("\n", $dtd_lines) . "\n]", $x); $new_lines[] = $y; } else { $new_lines[] = $x; } } $doc->loadXML(implode("\n", $new_lines)); } else { $doc->loadXML(implode("\n", $xml_lines)); } // Enable user error handling libxml_use_internal_errors(true); if (@$doc->validate()) { echo "Valid!\n"; } else { echo "Not valid:\n"; $errors = libxml_get_errors(); foreach ($errors as $error) { print_r($error, true); } } } 请注意,为了简洁起见,错误处理已被抑制,可能有更好/更通用的方法来处理插值。但我 有 实际上将此代码与真实数据一起使用,它适用于PHP 5.2.17版本。 |
![]() |
4
0
试图完成“owenmashall”的答案:在xml-validator.php中: 添加html、页眉、正文。..
template-format.xml:
|
![]() |
Karlo · PHP Sqlite PDO最新版本 5 月前 |
![]() |
Malte · 检查远程服务器上是否存在文件(使用PHP)[关闭] 5 月前 |
![]() |
Bard.Mus · 迁移后的数据库字符集环境 6 月前 |