You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何消除xmllint校验SVG时<a>元素xlink:href属性缺失警告?

问题描述

使用dot生成的SVG文件(bb.svg)内容如下:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="780pt" height="27pt" viewBox="0.00 0.00 780.00 27.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">

<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 23)">
  <title>A fie</title>
    <!-- Node1c -->
    <g id="Node000001c" class="node">
      <title>Node1c</title>
      <g id="a_Node000001c">
        <a xlink:title="tooltip but no href">
          <polygon fill="white" stroke="#666666" points="372.5,-19 262.5,-19 262.5,0 372.5,0 372.5,-19"/>
          <text text-anchor="middle" x="317.5" y="-7" font-family="Helvetica,sans-Serif" font-size="10.00">1c Set tooltip,no URL</text>
        </a>
      </g>
    </g>
</g>
</svg>

使用本地DTD文件(存放于tmp_dtd目录)执行xmllint校验命令:

xmllint --path tmp_dtd --noout --nonet --postvalid bb.svg

收到如下校验错误:

bb.svg:12: element a: validity error : Element a does not carry attribute xlink:href
解决方法

有三种方式可以处理该错误:

1. 修改SVG文件以符合DTD要求

SVG 1.1的DTD规定<a>元素必须携带xlink:href属性。给<a>标签添加一个不触发跳转的合法href即可,示例:

<a xlink:href="javascript:void(0)" xlink:title="tooltip but no href">

这样既满足DTD校验规则,又不会影响tooltip显示和页面行为。

2. 过滤xmllint的错误输出

若不想修改SVG文件,可通过shell命令过滤掉这条特定错误信息,调整后的命令如下:

xmllint --path tmp_dtd --noout --nonet --postvalid bb.svg 2>&1 | grep -v "Element a does not carry attribute xlink:href"

该命令将错误输出重定向到标准输出后,通过grep -v排除指定的错误行。

3. 修改本地DTD文件(不推荐)

若有权限修改本地svg11.dtd文件,可找到<a>元素的定义部分,将xlink:href属性从必填改为可选。但这种方法会破坏DTD的标准一致性,可能引发其他校验问题,不建议使用。

内容的提问来源于stack exchange,提问作者albert

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 18:45:32