2014-11-04 2 views
-1

Я пытаюсь проверить (действительный файл xml) xml при создании XMLStreamReader с использованием XMLInputFactory.Проверка XML без наличия конкретного XSD

Я знаю, что есть свойство, которое может быть установлено на заводе javax.xml.stream.isValidating, чтобы разрешить проверку конкретной реализации (в моем случае xml). Но я работаю с java 6 build 43 (Jboss eap 6.0) и не может обновить, так что это не работает для меня (проблема kwnon).

Так что если кто-нибудь знает о любом API (кроме StAX), который мог бы сделать то же самое, что было бы здорово! Пожалуйста, дайте мне знать, если что-то неясно объяснено.

+0

Непонятно, что вы просите. Во-первых, проверка всегда противоречит какой-либо схеме (XSD, RELAX, Schematron и т. Д.). Для разницы между *** корректным XML *** и *** хорошо сформированным XML ***, я предлагаю вам прочитать [** this **] (http://stackoverflow.com/a/25830482/290085). Благодарю. – kjhughes

+0

Вы правы. Пепел. Я имел в виду хорошо сформированный xml-файл. например, когда я открываю ни один хорошо сформированный XML-файл с firefox, он показывает ошибку (пример XML Parsing Error). –

ответ

0

Нашел, я использовал апи SAX для создания парсера (независимо от схемы XSD) с помощью прилагаемого SAXParserFactory и разобрать файл. (подробнее см. на страницах (23/24) по адресу: http://apiacoa.org/publications/teaching/xml/api-xml.pdf)

Кроме того, не забудьте пометить/сбросить входной поток до/после того, как вы проанализируете его с помощью синтаксического анализатора (это вызовет исключение, если xml файл не является корректным), поэтому вы можете сохранить его, если он не завершится.

0

вы можете попробовать для Java XML API проверки с помощью IBM validation API или вы можете использовать javax.xml.validationjavax.xml.validation

например:

import javax.xml.XMLConstants; 
import javax.xml.transform.Source; 
import javax.xml.transform.stream.StreamSource; 
import javax.xml.validation.*; 
... 

URL schemaFile = new URL("http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"); 
Source xmlFile = new StreamSource(new File("web.xml")); 
SchemaFactory schemaFactory = SchemaFactory 
    .newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); 
Schema schema = schemaFactory.newSchema(schemaFile); 
Validator validator = schema.newValidator(); 
try { 
    validator.validate(xmlFile); 
    System.out.println(xmlFile.getSystemId() + " is valid"); 
} catch (SAXException e) { 
    System.out.println(xmlFile.getSystemId() + " is NOT valid"); 
    System.out.println("Reason: " + e.getLocalizedMessage()); 
} 

Редакцией:

SchemaFactory factory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema"); 

     File schemaFile = new File("schema.xsd"); 

     Schema xsdScheme = factory.newSchema(schemaFile); 

     Validator validator = xsdScheme.newValidator(); 

     Source source = new StreamSource(xmlfile); 

     validator.validate(source); 

одна ссылка, которая я нашел на SO xsd validation

+0

Он спросил * «без специфического XSD» *, но вы предлагаете ответ с конкретным XSD ('http: // java.sun.com/xml/ns/j2ee/web-app_2_4.xsd')? – kjhughes

Смежные вопросы