在 HTML 元素中重新定义了 xmlns

问题描述 投票:0回答:1

我正在使用 HTML Tidy(版本 5.8.0)来清理源自 Web 的 HTML,以便使用 XSLT 进行转换。 这通常工作得很好,直到我发现一个页面,其中 2 个

<use/>
元素具有相同的重复 xmlns:xlink 定义。

示例.html:

<!DOCTYPE html>
<html>
    <head>
        <title>title</title>
    </head>
    <body>
        <svg>
            <use xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#gel-icon-search" href="#gel-icon-search" role="presentation"/>
        </svg>
        <svg>
            <use xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#gel-icon-no" href="#gel-icon-no" role="presentation"/>
        </svg>
    </body>
</html>

当通过 HTML Tidy 运行时,这不会被注意到:

$ tidy --output-xhtml 1 example.html > /dev/null
Info: Document content looks like XHTML 1.0 Transitional
No warnings or errors were found.

但由于同样的原因,它严重地导致了我的 XSLT 处理器和 xmllint 的故障:

$ xmllint example.html
example.html:8: parser error : Attribute xmlns:xlink redefined
:xlink="http://www.w3.org/1999/xlink" xmlns:xlink="http://www.w3.org/1999/xlink"
                                                                               ^
example.html:11: parser error : Attribute xmlns:xlink redefined
:xlink="http://www.w3.org/1999/xlink" xmlns:xlink="http://www.w3.org/1999/xlink"
                                                                               ^

我希望 HTML Tidy 能够规范化重复的

xmlns:xlink...
属性,就像处理普通属性一样(它保留第一个或最后一个)。

xmlns:xlink...
删除重复的
sed
很简单,但它仍然是双重处理。

我只是错过了正确的 Tidy 选项吗?

以下选项没有区别:

--output-xml 1
--drop-proprietary-attributes 1
--doctype strict
--strict-tags-attributes 1
--repeated-attributes keep-first

我怀疑这是Tidy中的一个错误,如果没有简单的解释,我会提交它。

xslt xmllint htmltidy
1个回答
0
投票

使用

xmllint --recover
将显示警告,但会去除双重属性(比使用
sed
更好的选择)。

xmllint --recover ~/tmp/test.html

结果

/home/lmc/tmp/test.html:8: parser error : Attribute xmlns:xlink redefined
:xlink="http://www.w3.org/1999/xlink" xmlns:xlink="http://www.w3.org/1999/xlink"
                                                                               ^
/home/lmc/tmp/test.html:11: parser error : Attribute xmlns:xlink redefined
:xlink="http://www.w3.org/1999/xlink" xmlns:xlink="http://www.w3.org/1999/xlink"
                                                                               ^
<?xml version="1.0"?>
<!DOCTYPE html>
<html>
    <head>
        <title>title</title>
    </head>
    <body>
        <svg>
            <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#gel-icon-search" href="#gel-icon-search" role="presentation"/>
        </svg>
        <svg>
            <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#gel-icon-no" href="#gel-icon-no" role="presentation"/>
        </svg>
    </body>
</html>

警告发送至 stderr,以便可以从输出中删除

xmllint --recover ~/tmp/test.html 2>/dev/null
© www.soinside.com 2019 - 2024. All rights reserved.