2012-06-07 5 views
0

Я пытаюсь проверить XML на XSD, который внутренне ссылается на другой XSD (используя оператор include).Проверка xml на xsd с включенным

, как,

<xs:include schemaLocation="Schema2.xsd"/> 

Теперь при проверке моего XML против XSD (schema1.xsd), как:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 

    DocumentBuilder builder; 
    try { 
     builder = factory.newDocumentBuilder(); 

     Document document = builder.parse(new InputSource(new StringReader(
       inputXml))); 
     TransformerFactory tranFactory = TransformerFactory.newInstance(); 
     Transformer aTransformer = tranFactory.newTransformer(); 
     Source src = new DOMSource(document); 
     Result xmlFile = new StreamResult(new File("xmlFileName.xml")); 
     aTransformer.transform(src, xmlFile); 
    } catch (Exception e) { 
     // TODO: handle exception 
    } 

    File xmlFile = new File("xmlFileName.xml"); 
    SchemaFactory factory1 = SchemaFactory 
      .newInstance("http://www.w3.org/2001/XMLSchema"); 

    File schemaLocation = new File("F:\\Project\\Automation\\XSDs\\schema1.xsd"); 
    Schema schema = factory1.newSchema(schemaLocation); 

    Validator validator = schema.newValidator(); 

    Source source = new StreamSource(xmlFile); 

    try { 
     validator.validate(source); 
     System.out.println(xmlFile.getName() + " is valid."); 
     isXmlValid = true; 
    } catch (SAXException ex) { 
     System.out.println(xmlFile.getName() + " is not valid because "); 
     System.out.println(ex.getMessage()); 
     isXmlValid = false; 
    } 

Я получаю сообщение об ошибке «CVC-тип данных-valid.1.2.1 : «True» не является допустимым значением для «boolean». »

Это элемент, который определен в schema2.xsd, к которому относится schema1.xsd.

Скажите, пожалуйста, если я что-то делаю неправильно.

ответ

0

У вас возникла проблема с корпусом. «true» является допустимым значением для xsd: boolean, но «True» (что, судя по всему, есть в документе XML).

Ответы здесь (xsd:boolean element type accept "true" but not "True". How can I make it accept it?) содержат дополнительную информацию и возможное альтернативное решение, основанное на перечислимых значениях (если вы не можете изменить True на true).

+0

Awesome !! .. Спасибо за решение. – Piyush