Ссылка на подмножество сущности должна заканчиваться символом ';' ограничитель
Я пытаюсь включить webfonts в шаблон блога 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.
Как мне решить эту проблему? Спасибо.
Ответы
Ответ 1
Это потому, что &
является зарезервированным символом в XML, что означает, что "объект XML начинается здесь". Объекты XML позволяют печатать символы или последовательности символов, которые трудно вставлять в документ буквально, либо потому, что у вас его нет на клавиатуре, либо потому, что это запрещает кодирование документа. Например, в (X) HTML é
печатает символ "é", который нелегко найти на большинстве клавиатур США. (Доступные объекты зависят от объявления <!DOCTYPE>
вашего XML-документа.)
Проблема с этой схемой заключается в том, что это означает, что вы не можете однозначно оставить литеральные символы &
вокруг вашего документа, если они могут быть началом сущности, поэтому вам необходимо закодировать их как сущность для решения этой проблемы.
Вам нужно будет заменить все ваши отклоненные &
на &
, которые будут печатать &
без обращения к парсеру XML. В вашем случае вы должны быть хорошо с заменой &subset=
на &subset=
в двух тегах <link>
.
Ответ 2
Амперсанды в 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