我正在寻找一种工具,可以让我检查某段HTML是否在其正确的上下文中有效。
我输入了类似
的内容<dd>
my definition
<div>
div inside <dd> is allowed
</div>
</dd>
而不是整个文件。普通的验证器会抱怨丢失的dl-tag,但大多数时候我只想知道某个元素是否在另一个元素内有效。
我会尝试更详细地解释它。请考虑以下代码段:
<form>
<label>Name: <input /></label>
</form>
是有效的,但要检查它我有两个选择:
基本上我想检查一个元素是否只包含允许包含的元素。
答案 0 :(得分:41)
您实际上可以使用W3C验证程序来检查代码段。
选择“通过直接输入验证”标签,然后选择“更多选项”。在那里有一个“验证HTML片段”的单选按钮。 http://validator.w3.org/#validate_by_input+with_options
它会将您的页面包装在有效的html中,因此您看到的错误仅来自您的代码段。
答案 1 :(得分:0)
W3C当前(2020年5月)确实有一个片段验证器,但是它似乎有位验证符(至少没有HTML5)。这是几个简单的脚本,它们在片段上附加页眉和页脚,并通过Nu checker的本地副本运行结果。该片段可以是在<body>
标记的顶层有效的任何内容-如果需要其他内容,请修改页眉和页脚。
validate1.sh
接受一个文件名参数并进行检查,而validate2.sh
循环浏览目录中的所有HTML文件。它具有一个简单的排除列表机制,您需要对其进行更改。您需要同时修改两者以指向您的vnu.jar
副本。
validate1.sh
:
#!/bin/bash
#
# validate1.sh
#
# Run the nu validator on the HTML fragment in the supplied filename.
# This script adds a header and trailer around the fragment, and supplies
# the result to 'vnu.jar'. You'll need to modify it to correctly locate
# vnu.jar.
if test "$#" -ne 1; then
echo "Usage: '$0 fname', where 'fname' is the HTML file to be linted"
exit 1
fi
var="<!doctype html>
<html lang=\"en\">
<head>
<title>foo</title>
</head>
<body>
$(< "$1")
</body>
</html>"
echo "Checking '$1'... subtract 6 from any reported line numbers"
echo "$var" | java -jar vnu.jar -
validate2.sh
:
#!/bin/bash
#
# validate2.sh
#
# Run the nu validator on the HTML fragments in the supplied directory. This
# script adds a header and footer around each fragment in the directory, and
# supplies the result to 'vnu.jar'. You'll need to modify it to correctly
# locate vnu.jar.
if test "$#" -ne 1; then
echo "Usage: '$0 fname', where 'fname' is the HTML directory to be linted"
exit 1
fi
for filename in $1/*.html; do
case $filename in
# simple exclusion list example:
"$1/root.html" | "$1/sitedown.html")
echo "Skipping '$filename'"
continue
;;
*)
;;
esac
var="<!doctype html>
<html lang=\"en\">
<head>
<title>foo</title>
</head>
<body>
$(< "$filename")
</body>
</html>"
echo "Checking '$filename'... subtract 6 from any reported line numbers"
echo "$var" | java -jar vnu.jar -
done