你知道HTML-Snippet Validator吗?

时间:2011-11-09 06:15:24

标签: html html5 validation xhtml

我正在寻找一种工具,可以让我检查某段HTML是否在其正确的上下文中有效。

我输入了类似

的内容
<dd>
    my definition 
    <div>
        div inside &lt;dd&gt; is allowed
    </div>
</dd>

而不是整个文件。普通的验证器会抱怨丢失的dl-tag,但大多数时候我只想知道某个元素是否在另一个元素内有效。


我会尝试更详细地解释它。请考虑以下代码段:

<form>
    <label>Name: <input /></label>
</form>

是有效的,但要检查它我有两个选择:

  1. 验证整个文档:大多数情况下这已经足够好了,但有时当我处理部分HTML片段或嵌入式HTML时,它会有一些麻烦。我必须将整个内容复制到一个新的HTML文档并验证它。
  2. 只需复制代码段并使用W3C验证程序对其进行验证,然后忽略部分错误。
  3. 基本上我想检查一个元素是否只包含允许包含的元素。

2 个答案:

答案 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