验证对一个XSD使用PHP XML文件(validate a xml file against a

2019-07-30 14:37发布

如何验证对一个XSD一个xml文件? 有DOM文档:: schemaValidate(),但它不会告诉哪里都是错误的。 是有任何类? 它有任何值得做从头说解析器? 或者它只是重新发明轮子他,

Answer 1:

此代码的业务:

$xml= new DOMDocument();
$xml->loadXML(<A string goes here containing the XML data>, LIBXML_NOBLANKS); // Or load if filename required
if (!$xml->schemaValidate(<file name for the XSD file>)) // Or schemaValidateSource if string used.
{
   // You have an error in the XML file
}

看到代码http://php.net/manual/en/domdocument.schemavalidate.php要检索的错误。

贾斯汀在redwiredesign点com 08 - 11月,2006年03:32后。



Answer 2:

从用户的contrib http://php.net/manual/en/domdocument.schemavalidate.php

它的工作原理就像一个魅力!

从DOM文档:: schemaValidate更详细的反馈,禁用的libxml错误,并获取自己的错误信息。 见http://php.net/manual/en/ref.libxml.php获取更多信息。

的example.xml

<?xml version="1.0"?>
<example>
    <child_string>This is an example.</child_string>
    <child_integer>Error condition.</child_integer>
</example>

example.xsd

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
    <xs:element name="example">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="child_string" type="xs:string"/>
                <xs:element name="child_integer" type="xs:integer"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

PHP

<?php

function libxml_display_error($error)
{
    $return = "<br/>\n";
    switch ($error->level) {
        case LIBXML_ERR_WARNING:
            $return .= "<b>Warning $error->code</b>: ";
            break;
        case LIBXML_ERR_ERROR:
            $return .= "<b>Error $error->code</b>: ";
            break;
        case LIBXML_ERR_FATAL:
            $return .= "<b>Fatal Error $error->code</b>: ";
            break;
    }
    $return .= trim($error->message);
    if ($error->file) {
        $return .=    " in <b>$error->file</b>";
    }
    $return .= " on line <b>$error->line</b>\n";

    return $return;
}

function libxml_display_errors() {
    $errors = libxml_get_errors();
    foreach ($errors as $error) {
        print libxml_display_error($error);
    }
    libxml_clear_errors();
}

// Enable user error handling
libxml_use_internal_errors(true);

$xml = new DOMDocument();
$xml->load('example.xml');

if (!$xml->schemaValidate('example.xsd')) {
    print '<b>DOMDocument::schemaValidate() Generated Errors!</b>';
    libxml_display_errors();
}

?>


文章来源: validate a xml file against a xsd using php