问题点:当不XML中的xsi:noNamespaceSchemalLocation="{books,xsd}",则报错元素 'books' 中不允许出现属性 'xsi:noNamespaceSchemalLocation',如后面图片,删除则正常
XML:
<?xml version="1.0" encoding="UTF-8"?>
<!-- <!DOCTYPE books[
<!ELEMENT books (book*)>
<!ELEMENT books (name,author,price)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT author(#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ELEMENT book id CDATA #REQUIRED>
]> -->
<books xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemalLocation="{books,xsd}">
<book id="1001">
<name>java开发实战</name>
<author>张小三</author>
<price>98.5</price>
</book>
<book id="1002">
<name>mysql删除库到跑路</name>
<author>王一一</author>
<price>88.5</price>
</book>
</books>
xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" >
<xs:element name="books">
<xs:complexType>
<xs:sequence>
<xs:element name="book" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"></xs:element>
<xs:element name="author" type="xs:string"></xs:element>
<xs:element name="price" type="xs:double"></xs:element>
</xs:sequence>
<xs:attribute name="id" type="xs:positiveInteger" use="required"></xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
测试类:
package cn.sxt.xmlproject;
import java.io.File;
import java.io.IOException;
import javax.xml.transform.Source;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;
import org.xml.sax.SAXException;
public class Test {
public static void main(String[] args) throws SAXException{
//(1)创建SchemaFactory
SchemaFactory sch = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
//(2)创建验证文件
File schemaFile = new File("book.xsd");
//(3)利用SchemaFactory工厂对象,接收验证的文件对象,生成Schema对象
Schema schema = sch.newSchema(schemaFile);
//(4)产生对此schema的验证器
Validator validator = schema.newValidator();
//(5)要验证的数据(准本数据源)
Source source = new StreamSource("book.xml");
//(6)开始验证
try {
validator.validate(source);
System.out.println("成功");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("失败");
}
}
}

MyXML.rar