1
5
看一看 PHP's DOM 特别是 DOMDocument::schemaValidate 和 DOMDocument::validate . domDocument::validate的示例相当简单:
|
2
3
如果在字符串中有DTD,则可以使用 data wrapper 对于DTD:
|
3
3
我对原始问题的解释是,我们有一个“板载”XML文件,希望根据“板载”DTD文件进行验证。下面是我将如何实现“在doctype元素内插入本地dtd”的想法,这一想法由soren和payamrwd在评论中表示:
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
试图完成“欧文马歇尔”的回答:在xml-validator.php中: 添加HTML、页眉、正文…
template-format.xml:
|
JobProcessTask · 如何读取此xpath表达式? 2 年前 |
MBF · PHP导入/解析XML文件内容保存到数据库 2 年前 |
TenkMan · SQL Server XML嵌套值查询表单990 2 年前 |
Mohan.Murali.Peddini · XSLT模板循环记录 2 年前 |