Я создал 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>
Я использовал функцию schemaValidate PHP DOMDocument для проверки xml на xsd, и он дает следующую ошибку
Fatal Error 4: Start tag expected, '<' not found on line 5 Error 1872: The document has no document element. on line 0
Но я проверил эти два файла (xml и xsd) в этой ссылке W3C XML Schema Online validation , и он успешно проверяет без какой-либо ошибки.
Что я должен сделать, чтобы получить работу в 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)
Этот источник должен быть строкой, содержащей схему. Кажется, что вы используете функцию schemaValidateSource, отличную от schemaValidate. (Однажды я застрял там же) приветствия
Просто закройте файл xsd:
</xsd:schema>
Я пробую это сейчас, и для меня это работает.