2014-01-06 7 views
8

ich wie eine XML erstellt haben unterXML-Validierung gegen XSD in PHP libxml

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

und meine XSD-Datei wie unten Code ist

<?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> 

ich PHP DOMDocument der schemaValidate Funktion verwendet haben, die XML-Validierung gegen die xsd, und es gibt folgenden Fehler

Fatal Error 4: Start tag expected, '<' not found on line 5 
Error 1872: The document has no document element. on line 0 

Aber ich habe diese beiden Dateien (xml und xsd) in diesem Link W3C XML Schema Online validation, und es wird erfolgreich validiert, ohne einen Fehler anzuzeigen.

Was muss ich tun, um diese Arbeit in PHP zu bekommen?

Hinweis: meine php Libxml Version ist 2.7.8

Antwort

11

dom gibt speziell zwei Funktionen zur Validierung mit Schema. One ist

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

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

Dateipfad zu geben, sonst könnten Sie

$is_valid_xml = $doc->schemaValidateSource($source) 

Diese Quelle soll eine Zeichenfolge sein, das Schema enthält. Es scheint, dass Sie die schemaValidateSource-Funktion anders als schemaValidate verwenden. (Einmal war ich an der gleichen Stelle geklebt) prost

0

einfach Ihre XSD-Datei schließen:

</xsd:schema> 

ich es jetzt versuchen, und für mich das funktioniert.

+0

Sorry, ich habe gültig xsd verwendet, die es die XML in der genannten URL validiert ([XML-Schema-Validierung] (http://www.utilities-online.info/ xsdvalidation/#. UsqYpNIW2Fk)) Hier habe ich verpasst, – Kanagu

+0

Ahhh .. Ok. Lass uns das sehen ... –

+2

Ich habe es zu arbeiten, was ich hier falsch mache ist, habe ich $ xml = simplexml_load_string (xmlstring); Dann habe ich dieses XML-Objekt in DOMDocument :: loadXML ($ xml) verwendet, als ich xmlstring direkt in DOMDocument verwendet habe, dann funktioniert es einwandfrei. – Kanagu

Verwandte Themen