Как проверить xml с помощью dtd с помощью java?
у меня есть следующий 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 ответов
есть три вещи вы должны сделать:
-
свяжите исходный XML-документ с его DTD, используя объявление doctype после XML-объявление:
<!DOCTYPE Employee SYSTEM "employee.dtd">
Примечание: корень DOCTYPE должен соответствовать корневому элементу в исходном XML.
setValidating
totrue
на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>
вам просто нужно прочитать файлы и сообщить об исключениях, если таковые имеются. Вот это пример парсера SAX вы можете положиться.
для проверки Вашего XML и DTD вам просто нужно setValidating:
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>