将xml样式表添加到javascript内的SVG对象时出错

时间:2013-03-21 10:20:06

标签: css svg

将此行代码添加到我的javascript文件

时出错

解析错误:语法错误,意外T_STRING

var data = "<?xml-stylesheet type='text/css' href='css/main.css' ?>"+
        "<svg xmlns='http://www.w3.org/2000/svg' width='800' height='800'>"+
        "<foreignObject width='100%' height='100%'>" +
         "<div xmlns='http://www.w3.org/1999/xhtml'>"+$("#mainbody").html() 
             + "</div></foreignObject></svg>";
当我删除这部分时,问题会消失:

"<?xml-stylesheet type='text/css' href='css/main.css' ?>"

此外,我在另一个文件中有相同的行,但没有任何问题

可能是什么问题?

1 个答案:

答案 0 :(得分:1)

这是一个PHP错误。您需要转义<??>序列,这​​当然对PHP具有特殊意义。

然而,即使你修复了这个并让PHP开心,你想要做的事也行不通。当您尝试将某个DOM节点的“html”属性设置为您定义的此data变量时,您会收到一个不同的错误,指出DOM字符串格式错误(或者可能是{{1}伪指令将被忽略)。这是因为<?xml-stylesheet?>是出现在 XML文档的开头,而不是在可以分配给元素的xml-stylesheet属性的文本DOM片段中。它会在显示SVG 文档时生效,而不会在HTML页面中的SVG片段上生效。

你想在这里完成什么? html文件包含特别针对SVG片段的css声明?为什么不将CSS文件包含在HTML文件的HEAD中?

另一个可能的解决方案是将SVG外部化为一个单独的文件,并使用IMG元素或其他东西包括 - 在这种情况下main.css伪指令将正常工作。但这不会让你做你似乎试图用<?xml-stylesheet?>做的事 - 这是什么?以某种方式将HTML包装在SVG中?为什么呢?