当我在线验证我的xml时,一切都很好。但是在日食时它不起作用。它返回一个错误:
SAX异常:schema_reference.4:无法读取架构文档'file:/ C:/Users/ASUS/Downloads/Task3_XML/Task3_XML/weapon.xml',因为1)找不到该文档; 2)文件无法阅读; 3)文档的根元素不是。
这是我的代码
public static void main(String[] args) {
boolean isValid = validateXMLSchema("weapon.xml","weaponXSD.xml");
if(isValid){
System.out.println(args[1] + " is valid against " + args[0]);
}else {
System.out.println(args[1] + " is not valid against " + args[0]);
}
}
public static boolean validateXMLSchema(String xsdPath, String xmlPath){
try {
SchemaFactory factory =
SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = factory.newSchema(new File(xsdPath));
Validator validator = schema.newValidator();
validator.validate(new StreamSource(new File(xmlPath)));
} catch (IOException e){
System.out.println("Exception: "+e.getMessage());
return false;
}catch(SAXException e1){
System.out.println("SAX Exception: "+e1.getMessage());
return false;
}
return true;
}
我的XML:
<?xml version="1.0" encoding="UTF-8"?>
<Gun>
<Weapon>
<Model>Пістолет «Форт-12»</Model>
<Handy>one-handed</Handy>
<Origin>Україна</Origin>
<TTH>
<carry>близька [0;500 m]</carry>
<effectiveRange>10 m</effectiveRange>
<availabilityClips>true</availabilityClips>
<availabilityOptics>false</availabilityOptics>
</TTH>
<Material>метал</Material>
</Weapon>
</Gun>
我的XSD简称:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Gun">
<xs:complexType>
<xs:sequence>
<xs:element name="Weapon" maxOccurs="unbounded" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="Model">`
如果您有任何想法,请写信给我,因为我不明白哪里有问题。
答案 0 :(得分:1)
错误说
file:/C:/Users/ASUS/Downloads/Task3_XML/Task3_XML/weapon.xml
不是XSD文件。
您正在将xml
文件作为第一个参数传递给方法validateXMLSchema
,而它期望将xsd
文件作为第一个参数。
您需要像这样调用该方法:
boolean isValid = validateXMLSchema("weaponXSD.xml", "weapon.xml");
另请将架构文件的扩展名更改为.xsd
weaponXSD.xsd
或只是
weapon.xsd