外部サービスからの応答をhtml形式で受け取り、フロントエンドに直接渡します。しかし、いつか外部システムが壊れたhtmlを返すと、私のサイトのページが壊れてしまうことがあります。そこで、このhtml応答が壊れているか有効であるかどうかを検証したいと思います。それが有効であれば、私はそれをさらに渡します。そうでなければ、ログのエラーで無視されます。バックエンドでのHTML検証
どのような手段で有効にすることができますかバックエンドで Javaでですか?
ありがとうございます。
外部サービスからの応答をhtml形式で受け取り、フロントエンドに直接渡します。しかし、いつか外部システムが壊れたhtmlを返すと、私のサイトのページが壊れてしまうことがあります。そこで、このhtml応答が壊れているか有効であるかどうかを検証したいと思います。それが有効であれば、私はそれをさらに渡します。そうでなければ、ログのエラーで無視されます。バックエンドでのHTML検証
どのような手段で有効にすることができますかバックエンドで Javaでですか?
ありがとうございます。
Javaで利用可能な「汎用」のものはないと思います。しかし、あなたがいずれかのOpen Source HTML Parser
を使用してHTMLを検証するために、独自のパーサを構築することができ、私は解決策を見つけた:
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);
本当の問題は、ありますなぜあなたのバックエンドの要求が死んでいる/壊れたリンクを返すのですか? – Fallenreaper
http://stackoverflow.com/questions/4217801/a-html-validator-in-javaこの質問をチェック! –