Вам в основном не повезло.
Прежде всего, то, с чем вы имеете дело, называются символьными ссылками, поэтому CreateEntityReference терпит неудачу. Единственная причина, по которой существует ссылка на символ, заключается в предоставлении доступа к символам, которые были бы незаконными в данном контексте или каким-либо иным образом сложным для создания.
Определение: Ссылка на символ относится к определенному символу в наборе символов 10646 ISO/IEC, для примера можно непосредственно не доступны из доступных устройств ввода.
(See section 4.1 of the XML spec)
Когда процессор XML-встречает характеристику, если она есть ссылка в значении атрибута (то есть, если формат &#xxx
используется внутри атрибута), он установлен на «Включено», что означает, что его значение просматривается и текст заменяется.
Строка "ATamp;T;
" расширяется до " AT&T;
", а остальной амперсанд не распознаются как сущность-ссылки разделителя
(See section 4.4 of the XML spec)
Это запеченная в Спецификация 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>
фантастический ответ. У меня было некоторое ощущение, что «{» никогда не будет внутренне представлен как {, поэтому XmlDocument не будет «удерживать» это представление. – TesterTurnedDeveloper