web-dev-qa-db-ja.com

Javaを使用してdtdでxmlを検証する方法は?

私は次のxmlファイルを持っています:

<?xml version = "1.0" ?>
<Employee>
<Emp_Id> E-001</Emp_Id>
<Emp_Name> Vinod  </Emp_Name>
<Emp_E-mail> [email protected] </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)>

Javaを使用して上記のdtdでこのxmlファイルを検証したいと思います。

助けてください、ありがとう.. :-)

13
Sachin J

あなたがしなければならない3つのことがあります:

  • Doctype宣言を使用してソースXMLドキュメントをそのDTDに関連付けますafter XML宣言:

    <!DOCTYPE Employee SYSTEM "employee.dtd">
    

    :DOCTYPEルートは、ソースXMLのルート要素と一致する必要があります。

  • setValidatingtrueからDocumentBuilderFactory

  • DocumentBuilderを使用して、org.xml.sax.ErrorHandlerインスタンスを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> [email protected] </Emp_E-mail>
</Employee>
19
Wayne Burkett

ファイルを読んで、例外がある場合は報告するだけです。これが SAXパーサーの例 信頼できるものです。

XMLとDTDを検証するには、次のように設定する必要があります。

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

また、XMLファイルでDTDの使用法を宣言します。

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