对实体“子集”的引用必须以“;”结尾分隔符

时间:2013-01-01 16:57:27

标签: html xml google-webfonts

我正在尝试将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生成并获取的。

我该如何解决这个问题?感谢。

2 个答案:

答案 0 :(得分:49)

那是因为&是XML中的保留字符,意味着“XML实体从这里开始”。 XML实体允许您打印难以在文档中嵌入文档的字符或字符序列,因为您没有在键盘上使用它,或者因为文档编码禁止它。例如,在(X)HTML中,&eacute;打印字符“é”,这在大多数美国键盘上都不容易找到。 (可用实体取决于XML文档的<!DOCTYPE>声明。)

该方案的问题在于,如果它们可以作为实体的开头,则意味着您不能明确地在文档周围留下文字&字符,因此您需要将它们编码为实体以解决该问题问题

您需要将所有流浪&替换为&amp;,这将打印&而不会激怒XML解析器。在您的情况下,您应该善于在&subset=个标记中将&amp;subset=替换为<link>

答案 1 :(得分:5)

XML中的&符号表示实体引用的开始。它以&符号开头,然后有一个标记表示它所指的是哪个实体,然后用分号结束它。为了在文档中包含文字&符号,您需要使用引用&符号的字符实体引用,即&amp;

由于您还没有这样做,解析器正在尝试解析以下数据,就好像它是实体引用一样,但实际上并非如此。这就是它无法解析的原因 - 它无法在实体引用的末尾找到分号,因为它不应该是实体引用。

例如,你有:

http://fonts.googleapis.com/css?family=Share:400,700&subset=latin,latin-ext

你应该:

http://fonts.googleapis.com/css?family=Share:400,700&amp;subset=latin,latin-ext