Тебе в основном не повезло.
Во-первых, то, с чем вы имеете дело, называется ссылками на символы, поэтому CreateEntityReference завершается ошибкой. Единственная причина существования ссылки на символ состоит в том, чтобы предоставить доступ к символам, которые были бы недопустимы в данном контексте или иным образом сложны для создания.
Определение: ссылка на символ
относится к конкретному персонажу в
Набор символов ISO / IEC 10646, для
пример один не доступен напрямую
из доступных устройств ввода.
( См. Раздел 4.1 спецификации XML )
Когда процессор XML встречает символьную ссылку, если на него ссылаются в значении атрибута (то есть, если в атрибуте используется формат &#xxx
), ему присваивается значение «Включено», что означает его значение. ищется и текст заменяется.
Строка "ATamp;T;
" расширяется до "
AT&T;
", а оставшийся амперсанд
не признается как ссылка на объект
Разделитель
( См. Раздел 4.4 спецификации XML )
Это встроено в спецификацию XML, а стек Microsoft XML делает то, что требуется: обрабатывает ссылки на символы.
Лучшее, что я могу увидеть, это взглянуть на эти старые статьи XML.com, одна из которых использует XSL для отключения экранирования выходных данных, поэтому {
превратится в {
в выходных.
http://www.xml.com/pub/a/2001/03/14/trxml10.html
<!DOCTYPE stylesheet [
<!ENTITY ntilde
"<xsl:text disable-output-escaping='yes'>&ntilde;</xsl:text>">
]>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output doctype-system="testOut.dtd"/>
<xsl:template match="test">
<testOut>
The Spanish word for "Spain" is "España".
<xsl:apply-templates/>
</testOut>
</xsl:template>
</xsl:stylesheet>
И этот, который использует XSL для преобразования определенных символьных ссылок в другие текстовые последовательности (для достижения той же цели, что и предыдущая ссылка).
http://www.xml.com/lpt/a/1426
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0">
<xsl:output use-character-maps="cm1"/>
<xsl:character-map name="cm1">
<xsl:output-character character=" " string="&nbsp;"/>
<xsl:output-character character="é" string="&233;"/> <!-- é -->
<xsl:output-character character="ô" string="&#244;"/>
<xsl:output-character character="—" string="--"/>
</xsl:character-map>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>