Вы не можете использовать символы '{' и '|' непосредственно в атрибутах id, потому что в спецификации XML написано
Значения типа ID должны совпадать с именем производства. Имя не должно появляться более одного раза в документе XML как значение этого типа; то есть значения идентификаторов должны однозначно идентифицировать элементы, которые их несут.
Название производства здесь . Если вы развернете правило синтаксиса, вы увидите, что единственные символы, разрешенные в имени, задаются этими продукциями:
[4] NameStartChar :: = ":" | [A-Z] | "_" | [a-z] | [# xC0- # xD6] | [# xD8- # xF6] | [# xF8- # x2FF] | [# x370- # x37D] | [# x37F- # x1FFF] | [# x200C- # x200D] | [# x2070- # x218F] | [# x2C00- # x2FEF] | [# x3001- # xD7FF] | [# xF900- # xFDCF] | [# xFDF0- # xFFFD] | [# X10000- # xEFFFF]
[4a] NameChar :: = NameStartChar | "-" | "" | [0-9] | # xB7 | [# x0300- # x036F] | [# X203F- # x2040]
К сожалению, левая скоба и труба не допускаются. Кодовые точки для этих символов # 7B и # 7C соответственно; не в допустимых диапазонах символов.
TL; DR: допустимые символы для атрибутов ID принадлежат спецификации XML, а два ваших символа недопустимы.
ДОПОЛНЕНИЕ
Вот несколько примеров. Следующий документ проходит проверку для XHTML на сайте проверки W3C:
<?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">
<head>
<title>A title</title>
</head>
<body id="anid">
</body>
</html>
но следующее не будет
<?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">
<head>
<title>A title</title>
</head>
<body id="ani{d">
</body>
</html>
Получаем ошибку:
Line 8, Column 16: character "{" is not allowed in the value of attribute "id"
Теперь довольно интересно, что если вам действительно нужна левая фигурная скобка в имени идентификатора, вы можете попробовать вот это:
<?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">
<head>
<title>A title</title>
</head>
<body id="ani{d">
</body>
</html>
Но вы получаете такую же ошибку! Вы можете попробовать это; Валидатор показывает строку с хэшом амперсанда x семь b точка с запятой, но считает, что там есть левая скобка.
Суть в том, что вы просто не можете иметь идентификаторы с символами, отличными от тех, которые разрешены спецификацией XML.