2012-01-10 91 views
0

XSD minLength驗證我想通過XSD驗證XML。 不得不提的就是我的XSD工作正常,除了這一塊:通過PHP的DOMDocument :: schemaValidateSource()

<xs:element name="some_element"> 
    <xs:simpleType> 
     <xs:restriction base="xs:string"> 
      <xs:minLength value="50"/> 
     </xs:restriction> 
    </xs:simpleType> 
</xs:element> 

我做了一個包裝PHP類來驗證此針對XML,並在它的核心,它這樣做:

$dom = new DOMDocument(); 
$dom->loadXML($xml); 

// handle errors manually 
set_error_handler(array($this, 'errorHandler')); 

// validate 
$isValid = $dom->schemaValidateSource($xsd); 

// restore default error handler 
restore_error_handler(); 

問題是,即使在<some_element></some_element><some_element>[100_chars_here]</some_element>,它驗證(我沒有得到任何錯誤),並且我希望該元素的最小內容長度爲50。

是否有錯誤?我在這裏錯過了什麼?它適用於XSD中的正則表達式模式,但我不想使用這些。

我在WinXP上使用PHP 5.3.5libxml 2.7.7

回答

0

從表面上看,它看起來像一個bug,但沒有足夠的信息來說明這一點。

您是否嘗試過使用其他架構處理器運行驗證?如果懷疑有bug,那應該是你的第一步,因爲它可能會以某種方式確認它。

+0

嗯,沒有想到這一點。有什麼建議麼?我會檢查XMLPad或Xerces。 – nevvermind 2012-01-10 15:30:00

+0

是的,在命令行中使用libxml2 2.7.8的xmllint,驗證失敗;應該如此。感謝您指點我正確的方向。 – nevvermind 2012-01-11 08:08:06