2015-11-29 5 views
0

Когда я проверяю свой xml онлайн, все это хорошо. Но когда в затмении это не работает. Это возвращает ошибку:проверка XML на XSD java

SAX Exception: schema_reference.4: Failed to read schema document 'file:/C:/Users/ASUS/Downloads/Task3_XML/Task3_XML/weapon.xml', because 1) could not find the document; 2) the document could not be read; 3) the root element of the document is not .

Это мой код

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

Ошибка говорит

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 
Смежные вопросы