java - 当使用架构验证无效 XML 时,为什么我没有得到异常?

标签 java xml xsd saxparser

这是 XML 架构:

<?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 文件:

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

使用 XML 并应测试一致性的 Java 代码:

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);

但我没有遇到任何异常(exception)。怎么了?

最佳答案

我发现您正在使用自定义ProductsSaxHandler

您没有为其提供代码,但当调用 ErrorHandler 接口(interface)的通知方法之一时,它很可能不会引发异常。

确保覆盖 ProductSaxHandlererrorfatalErrorwarning 方法以引发异常。

关于java - 当使用架构验证无效 XML 时,为什么我没有得到异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11216681/

相关文章:

java - XML 验证似乎忽略了一些 XSD 元素

android - SchemaFactory.newInstance() 异常

java - JUnit 如何测试迭代器

Java 树节点 : How to prevent getChildCount from doing expensive operation?

java - LWJGL 无法使用 VBO 创建立方体

c# - 将 .net 对象反序列化为具有多个命名空间的 XML

sql - 如何转换 SQL Server XML 类型值 (xsi :nil) of DateTime to null

java - 如何以编程方式从另一个 Android 应用程序访问/检测特定的 Activity 变量?

java - 为什么在 Jaxb2Marshaller 中需要检查根元素?

c# - 当我的所有 .XSD 都存储为资源时,如何解析 .XSD 的 schemaLocation 属性?