我正在尝试将Blogfonts包含在Blogger博客的模板中:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html>
<html b:version='2' class='v2' expr:dir='data:blog.languageDirection' xmlns='http://www.w3.org/1999/xhtml' xmlns:b='http://www.google.com/2005/gml/b' xmlns:data='http://www.google.com/2005/gml/data' xmlns:expr='http://www.google.com/2005/gml/expr'>
<head>
<link href='http://fonts.googleapis.com/css?family=Share:400,700&subset=latin,latin-ext' rel='stylesheet' type='text/css'>
<link href='http://fonts.googleapis.com/css?family=Istok+Web:400,700&subset=latin,latin-ext' rel='stylesheet' type='text/css'>
<meta content='IE=EmulateIE7' http-equiv='X-UA-Compatible'/>
<b:if cond='data:blog.isMobile'>
<meta content='width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0' name='viewport'/>
<b:else/>
当我尝试保存模板时,我得到:
Error parsing XML, line 5, column 76: The reference to entity "subset" must end with the ';' delimiter.
我尝试添加;
但未成功。这些链接是从Google Web Font生成并获取的。
我该如何解决这个问题?感谢。
答案 0 :(得分:49)
那是因为&
是XML中的保留字符,意味着“XML实体从这里开始”。 XML实体允许您打印难以在文档中嵌入文档的字符或字符序列,因为您没有在键盘上使用它,或者因为文档编码禁止它。例如,在(X)HTML中,é
打印字符“é”,这在大多数美国键盘上都不容易找到。 (可用实体取决于XML文档的<!DOCTYPE>
声明。)
该方案的问题在于,如果它们可以作为实体的开头,则意味着您不能明确地在文档周围留下文字&
字符,因此您需要将它们编码为实体以解决该问题问题
您需要将所有流浪&
替换为&
,这将打印&
而不会激怒XML解析器。在您的情况下,您应该善于在&subset=
个标记中将&subset=
替换为<link>
。
答案 1 :(得分:5)
XML中的&符号表示实体引用的开始。它以&符号开头,然后有一个标记表示它所指的是哪个实体,然后用分号结束它。为了在文档中包含文字&符号,您需要使用引用&符号的字符实体引用,即&
。
由于您还没有这样做,解析器正在尝试解析以下数据,就好像它是实体引用一样,但实际上并非如此。这就是它无法解析的原因 - 它无法在实体引用的末尾找到分号,因为它不应该是实体引用。
例如,你有:
http://fonts.googleapis.com/css?family=Share:400,700&subset=latin,latin-ext
你应该:
http://fonts.googleapis.com/css?family=Share:400,700&subset=latin,latin-ext