0

我试图用一行创建一个 SVG 文件。我不想直接在 style="..." 属性中定义样式属性。请注意,我在样式属性中添加了“&E1”,因为我想使用实体。这是我的尝试

<!DOCTYPE html>
<html>
<body>

<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"[
    <!ENTITY E1 'stroke-miterlimit:9;stroke-linecap:butt;opacity:1;stroke-width:1;fill:none;stroke-linejoin:miter;stroke:rgb(255,0,0);'>
]>
    <svg xmlns="http://www.w3.org/2000/svg" id="q_svg" version="1.1">
      <g id="root_group" style="shape-rendering:crispEdges;">
    <line x1="0" x2="12" y2="56" id="2" style="&E1;" y1="0" />
  </g>
</svg>

</body></html>

什么地方出了错?

4

1 回答 1

2

一件事是您为 svg 声明 DOCTYPE 的方式。我认为没有必要为 SVG 声明它,并且 dtd 声明应该在文档的顶部。另一个是我认为让浏览器知道文档是 XML/XHTML 而不是 HTML/HTML5 很重要,因为自定义 DTD 实体只能是 XML 的一部分。如果是文件,最好将其扩展名命名为.xml;如果它是动态生成的,请将内容类型设置为“application/xhtml+xml”或“application/xml”。以下代码段可能对您有用:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html 
    PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
[
  <!ENTITY E1 'stroke-miterlimit:9;stroke-linecap:butt;opacity:1;stroke-width:1;fill:none;stroke-linejoin:miter;stroke:rgb(255,0,255);'>
]>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="application/xhtml+xml;charset=utf-8"/>
    <title>Entities in XHTML</title>
</head>
<body>

  <svg xmlns="http://www.w3.org/2000/svg" id="q_svg" version="1.1">
    <g id="root_group" style="shape-rendering:crispEdges;">
      <line x1="0" x2="12" y2="56" id="2" style="&E1;" y1="0" />
    </g>
  </svg>

</body>
</html>

供参考。HTML 解析器不支持嵌入式实体声明

于 2013-11-04T10:03:35.197 回答