后端的HTML验证

时间:2016-09-14 15:39:45

标签: java html validation

我收到来自html格式的外部服务的回复,并将其直接传递给我的前端。但是,有时外部系统会返回损坏的html,这会导致我网站上的页面损坏。因此,我想验证这个HTML响应是否已损坏或有效。如果它有效,我将进一步传递,否则将在日志中忽略它。

我可以通过什么方式在Java中对后端进行验证

谢谢。

2 个答案:

答案 0 :(得分:1)

我相信Java中没有这样的“通用”东西。但您可以使用任何一个Open Source HTML Parser

构建自己的解析器来验证HTML

答案 1 :(得分:0)

我找到了解决方案:

private static boolean isValidHtml(String htmlToValidate) throws ParserConfigurationException, 
        SAXException, IOException {
    String docType = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" " +
            "\"https://www.w3.org/TR/xhtml11/DTD/xhtml11-flat.dtd\"> " +
            "<html xmlns=\"http://www.w3.org/1999/xhtml\" " + "xml:lang=\"en\">\n";

    try {
        InputSource inputSource = new InputSource(new StringReader(docType + htmlToValidate));

        DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
        domFactory.setValidating(true);
        DocumentBuilder builder = domFactory.newDocumentBuilder();
        builder.setErrorHandler(new ErrorHandler() {
            @Override
            public void error(SAXParseException exception) throws SAXException {
                throw new SAXException(exception);
            }

            @Override
            public void fatalError(SAXParseException exception) throws SAXException {
                throw new SAXException(exception);
            }

            @Override
            public void warning(SAXParseException exception) throws SAXException {
                throw new SAXException(exception);
            }
        });

        builder.parse(inputSource);
    } catch (SAXException ex) {
        //log.error(ex.getMessage(), ex); // validation message
        return false;
    }

    return true;
}

这种方法可以这样使用:

  String htmlToValidate = "<head><title></title></head><body></body></html>";

  boolean isValidHtml = isValidHtml(htmlToValidate);