2014-01-06 44 views
8

我已经创建了一个XML像下面XML验证libxml的

<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的DOM文档的schemaValidate功能验证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

回答

11

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函数。 (有一次,我被卡在了同一个地方) 欢呼

0

只要闭上你的XSD文件:

</xsd:schema> 

我现在尝试它,这对我来说工作。

+0

对不起,我已经用它验证在提到URL中的XML([XML模式验证(XSD有效http://www.utilities-online.info/ xsdvalidation /#。UsqYpNIW2Fk))在这里,我错过了包括 – Kanagu

+0

啊..好的。让我们看看这个... –

+2

我得到它的工作,我在做什么错在这里是,我用$ xml = simplexml_load_string(xmlstring);然后将该xml对象用于DOMDocument :: loadXML($ xml),当我直接将xmlstring用于DOMDocument时,那么它工作正常 – Kanagu