XML с XSD JAVA - PullRequest
       38

XML с XSD JAVA

4 голосов
/ 08 октября 2010

Мне была поручена работа по проверке XML на соответствие XSD, и если что-то будет пройдено, будет анализировать XML, чтобы можно было импортировать его в мою систему.

My Qyestion - это лучший способ проверки XML на соответствие XSD и лучший API для анализа XML в моем доменном объекте.

В поисках ценных предложений

Ответы [ 4 ]

9 голосов
/ 08 октября 2010

Часть 1 - проверка XML

Для этого вы можете использовать API javax.xml.validation .

SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); 
URL schemaURL = // The URL to your XML Schema; 
Schema schema = sf.newSchema(schemaURL); 
Validator validator = schema.newValidator();
validator.validate(xml);

Часть 2 - ОХМ

Что касается второй части вашего вопроса, то лучшим API для анализа XML в объекте домена является JAXB. JAXB - это спецификация с несколькими реализациями. Я возглавляю реализацию MOXy JAXB , которая содержит полезные расширения, такие как отображение на основе XPath .

Вы всегда можете выполнить проверку при преобразовании XML в объекты:

JAXBContext jc = JAXBContext.newInstance(Customer.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();

SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); 
URL schemaURL = // The URL to your XML Schema; 
Schema schema = sf.newSchema(schemaURL); 
unmarshaller.setSchema(schema);

JAXBElement<Customer> element = (JAXBElement<Customer>) unmarshaller.unmarshal(xml);
Customer customer = elemnt.getValue();
3 голосов
/ 08 октября 2010

Для этих операций можно использовать DOM или SAX парсеры.

EDIT Вот пример с синтаксическим анализом

    SAXParserFactory factory = SAXParserFactory.newInstance();
    factory.setValidating(true);
    factory.setNamespaceAware(true);

    SAXParser parser = factory.newSAXParser();
    parser.setProperty("http://java.sun.com/xml/jaxp/properties/schemaLanguage", 
          "http://www.w3.org/2001/XMLSchema");

    XMLReader reader = parser.getXMLReader();

    reader.setErrorHandler(new ErrorHandler(){
          public void warning(SAXParseException e) throws SAXException {
                System.out.println(e.getMessage());
            }

            public void error(SAXParseException e) throws SAXException {
                System.out.println(e.getMessage());
            }

            public void fatalError(SAXParseException e) throws SAXException {
                System.out.println(e.getMessage());
            }

    });
    reader.parse(new InputSource("document.xml"));

(я взял источник от здесь )

1 голос
/ 08 октября 2010

JAXB - это стандартная библиотека синтаксического анализа XML для Java: http://www.oracle.com/technetwork/articles/javase/index-140168.html. Она поставляется в комплекте с Java SE 6.

Ознакомьтесь с учебником .С помощью Unmarshaler / Marshaler легко зарегистрировать файл схемы и проверить .

0 голосов
/ 21 октября 2010

Вы можете использовать Castor, который генерирует классы Java для вашего XSD.Таким образом, вы можете конвертировать ваш XML в объекты и наоборот в несколько строк кода.

http://www.castor.org/1.3/index.html

...