Как проверить XML с Dtd с помощью Java? - PullRequest
13 голосов
/ 02 января 2012

У меня есть следующий xml-файл:

<?xml version = "1.0" ?>
<Employee>
<Emp_Id> E-001</Emp_Id>
<Emp_Name> Vinod  </Emp_Name>
<Emp_E-mail> Vinod1@yahoo.com </Emp_E-mail>
</Employee>

У меня есть следующий dtd-файл:

<!ELEMENT Employee (Emp_Id, Emp_Name, Emp_E-mail)>
<!ELEMENT Emp_Id (#PCDATA)>
<!ELEMENT Emp_Name (#PCDATA)>
<!ELEMENT Emp_E-mail (#PCDATA)>

Я хочу проверить этот xml-файл с вышеуказанным dtd, используя java.

Пожалуйста, помогите спасибо ..: -)

Ответы [ 2 ]

19 голосов
/ 03 января 2012

Есть три вещи, которые вы должны сделать:

  • Свяжите исходный XML-документ с его DTD, используя декларацию типа документа после декларации XML:

    <!DOCTYPE Employee SYSTEM "employee.dtd">
    

    Примечание : корень DOCTYPE должен соответствовать корневому элементу в исходном XML.

  • setValidating - true в DocumentBuilderFactory

  • Предоставьте org.xml.sax.ErrorHandler экземпляр для DocumentBuilder, используя setErrorHandler

Вот полный пример:

DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
domFactory.setValidating(true);
DocumentBuilder builder = domFactory.newDocumentBuilder();
builder.setErrorHandler(new ErrorHandler() {
    @Override
    public void error(SAXParseException exception) throws SAXException {
        // do something more useful in each of these handlers
        exception.printStackTrace();
    }
    @Override
    public void fatalError(SAXParseException exception) throws SAXException {
        exception.printStackTrace();
    }

    @Override
    public void warning(SAXParseException exception) throws SAXException {
        exception.printStackTrace();
    }
});
Document doc = builder.parse("employee.xml");

Исходный документ:

<?xml version="1.0"?>
<!DOCTYPE Employee SYSTEM "employee.dtd">
<Employee>
    <Emp_Id> E-001</Emp_Id>
    <Emp_Name> Vinod </Emp_Name>
    <Emp_E-mail> Vinod1@yahoo.com </Emp_E-mail>
</Employee>
1 голос
/ 02 января 2012

Вам просто нужно прочитать файлы и сообщить об исключениях, если таковые имеются. Вот пример SAX-парсера , на который можно положиться.

Для проверки вашего XML и DTD вам просто нужно установить Validating:

    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    dbf.setValidating(true); // since the default value is false

Также объявите использование DTD в вашем XML-файле:

<?xml version="1.0"?>
<!DOCTYPE Employee SYSTEM "employee.dtd">
<Employee>
...