提问人:Pick 提问时间:8/30/2023 更新时间:8/30/2023 访问量:28
在 PHP 中使用 RNG 验证 XML
Validate XML with RNG in PHP
问:
我想根据 RNG 架构验证 XML 文件。为此,我使用“DOMDocument relaxNGValidate”功能。我希望显示所有错误。但是我开发的代码只显示第一个。我已经搜索过,但找不到如何显示所有错误。
下面是PHP代码:
<?php
libxml_use_internal_errors(true);
// Create a new DOMDocument
$doc = new DOMDocument;
// Load XML
$doc->load('test.xml');
// Validate XML against RNG
if ($doc->relaxNGValidate('test.rng')) {
echo "Valid File.";
} else {
$errors = libxml_get_errors();
foreach ($errors as $error) {
echo "Erreur : " . $error->message . " (ligne " . $error->line . ")\n";
}
libxml_clear_errors();
}
libxml_use_internal_errors(false);
?>
仅显示第一个错误。 下面是一个示例 XML 文件:
<?xml version="1.0"?>
<collegqe>
<rollno>
<name>John Smith</name>
<subject>Web</subject>
</rollno>
<rollno>
<nameq>John Doe</nameq>
<subject>CSE</subject>
</rollno>
</collegqe>
和 RNG 文件:
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
<element name="college">
<zeroOrMore>
<element name="rollno">
<element name="name">
<text/>
</element>
<element name="subject">
<text/>
</element>
</element>
</zeroOrMore>
</element>
</start>
</grammar>
也许我错误地使用了该功能。也许我可以在进行检查之前将 rng 转换为 xsd?
答: 暂无答案
评论
libxml_use_internal_errors(true); $doc = new DOMDocument(); $doc->load($xmlFile); if (!$doc->relaxNGValidate($rngFile)) { $errors = libxml_get_errors(); foreach ($errors as $error) { echo "Error : " . $error->message . " (Line " . $error->line . ")\n"; } libxml_clear_errors(); }