为什么我的简单SVG无效?

时间:2013-11-04 06:31:58

标签: xml svg

我尝试使用一行创建一个SVG文件。我不想直接在style =“...”属性中定义样式属性。请注意,我在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>

出了什么问题?

1 个答案:

答案 0 :(得分: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>

FYI。 HTML parser does not support embedded entity declaration