我创建了一个如下所示的xml

<Request>
    <RequestType>Logon</RequestType>
    <MobileId>23424</MobileId>
    <Password>123456Gg</Password>
</Request>

而我的xsd文件就像下面的代码
<?xml version="1.0" encoding="utf-8"?>
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" version="1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="Request" type="RequestType"/>
<xsd:complexType name="RequestType">
    <xsd:sequence>
        <xsd:element name="RequestType">
            <xsd:simpleType>
                <xsd:restriction base="xsd:string">
                    <xsd:enumeration value="Logon"/>
                </xsd:restriction>
            </xsd:simpleType>
        </xsd:element>
        <xsd:element name="MobileId" >
            <xsd:simpleType>
                <xsd:restriction base="xsd:string">
                    <xsd:minLength value="0" />
                    <xsd:maxLength value="10" />
                </xsd:restriction>
            </xsd:simpleType>
        </xsd:element>
        <xsd:element name="Password">
            <xsd:simpleType>
                <xsd:restriction base="xsd:string">
                    <xsd:minLength value="0"/>
                    <xsd:maxLength value="255"/>
                </xsd:restriction>
            </xsd:simpleType>
        </xsd:element>
    </xsd:sequence>
</xsd:complexType>
</xsd:schema>

我已经使用PHP的DOMDocument的schemaValidate函数针对xsd验证xml,它给出了以下错误
Fatal Error 4: Start tag expected, '<' not found on line 5
Error 1872: The document has no document element. on line 0

但是我已经在此链接W3C XML Schema Online validation中测试了这两个文件(xml和xsd),并且它成功验证了,没有显示任何错误。

我必须做些什么才能在php中工作?

注意:我的PHP libxml版本是2.7.8

最佳答案

dom特别提供了两种使用模式进行验证的功能。
一种是给文件路径

$doc = new DOMDocument();
$doc->load('PATH TO XML');

$is_valid_xml = $doc->schemaValidate('PATH TO XSD');

否则你可以使用
$is_valid_xml = $doc->schemaValidateSource($source)

此源应该是包含架构的字符串。
似乎您使用的不是schemaValidate,而是使用schemaValidateSource函数。
(一旦我被困在同一个地方)
干杯

09-09 23:38
查看更多