针对XSD java

时间:2015-11-29 20:44:08

标签: java xml xsd

当我在线验证我的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">`

如果您有任何想法,请写信给我,因为我不明白哪里有问题。

1 个答案:

答案 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