2012-06-26 70 views
0

下面是XML模式:爲什麼在使用Schema驗證無效的XML時不會發生異常?

<?xml version="1.0" ?> 
<products> 
    <product> 
    <invalid_tag>32342</invalid_tag> 
    <name>Some name</name> 
    <price>3.89</price> 
    </product> 
</products> 

Java代碼與XML的工作和應測試的一致性:

SAXParserFactory factory = SAXParserFactory.newInstance(); 
factory.setValidating(false); 
SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); 
factory.setSchema(schemaFactory.newSchema(new File(xmlSchema))); 
parser = factory.newSAXParser(); 
ProductsSaxHandler handler = new ProductsSaxHandler(); 
parser.parse(new File(xmlFile), handler); 

但我不認爲是有效的一致性

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

    <xs:element name="products"> 
    <xs:complexType> 
     <xs:sequence minOccurs="0" maxOccurs="unbounded"> 
     <xs:element name="product" type="ProductType"/> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 

    <xs:complexType name="ProductType"> 
    <xs:sequence> 
     <xs:element name="id" type="xs:long" /> 
     <xs:element name="name" type="xs:string" /> 
     <xs:element name="price" type="xs:decimal" /> 
    </xs:sequence> 
    </xs:complexType> 

</xs:schema> 

XML文件沒有任何異常。哪裏不對?

回答

3

我看到您正在使用自定義ProductsSaxHandler

您沒有提供代碼,但很有可能在調用其中一個通知方法ErrorHandler時,它不會引發異常。

確保您覆蓋error,fatalErrorwarning方法ProductSaxHandler以引發異常。

+0

我還沒有在處理程序中實現這些方法。 –

相關問題