2016-08-23 5 views
0

Я создаю XML-файл, который я конвертирую в HTML, используя преобразование XSL в C++. Метод вывода преобразования - html. Я пытаюсь вывести символы Unicode в шестнадцатеричном формате. Например, я хотел бы вывести «& # x00cd» в файл XML. Если я используюКак избежать экранирования «&» при выводе XML для XLST в HTML

XmlDocument ^doc = gcnew XmlDocument(); 
doc->Load("XmlFile.xml"); 
XmlNode^ currNode = doc->DocumentElement->FirstChild; 
currNode = currNode->NextSibling; 
currNode->InnerText = L"Í"; 

то вывод XML с использованием настроек по умолчанию

XmlWriter^ writer = XmlWriter::Create("XmlFileOut.xml", settings); 
doc->Save(writer); 

выглядит

<node>&amp;#x00CD;</node> 

тогда, когда я делаю XML в HTML преобразования, вместо charcter я хочу в шрифт по выбору, я получаю

<p>Your symbol is (<span style="font-family:MyFont">&amp;#x00CD;</span>)</p> 

который, конечно же, отображается в браузере, как

You symbol is &#x00CD; 

Если я использую

currNode->InnerXML = L"&#x00CD;"; 

то вывод XML содержит фактический характер

<node>Í</node> 

и результирующий HTML работает нормально также

<p>Your symbol is (<span style="font-family:MyFont">Í</span>)</p> 

, который создает правильный символ символа в браузере.

НО, я хочу вывод XML и вывод HTML использовать значение Юникода шестигранную

&#x00CD; 

вместо фактического символа 'Н'

<node>&#x00CD;</node> 

для XML и

<p>Your symbol is (<span style="font-family:MyFont">&#x00CD;</span>)</p> 

для HTML, так что я могу более легко использовать преобразование XSL для создания RTF-файла из полученного HTML. (Мне нужны как HTML, так и RTF.)

Я знаю, что это должно быть грязно, но я разобрал свою фотографию.

+1

Если вы хотите «использовать преобразование XSL для создания RTF», то я не понимаю, зачем вам нужны ссылки на символы. XSLT, поскольку XML имеет полную поддержку Unicode, поэтому у него не должно быть проблем с вводом, например '

. Ваш символ ( Í)

', пока анализатор XML, используемый для его обработки, знает используемая кодировка. –

+0

Да, я вижу это сейчас. –

ответ

0

Предполагая, что вы хотите использовать XSLT для создания HTML с XslCompiledTransform где все символы не-ASCII уцелевшими в качестве ссылок на символы затем использовать <xsl:output method="html" indent="yes" encoding="us-ascii"/>, что путь вашего образец

<p> 
      Your symbol is (<span style="font-family:MyFont">Í</span>) 
      </p> 

сериализация в

<p> 
     Your symbol is (<span style="font-family:MyFont">&#xCD;</span>) 
     </p> 

при использовании XslCompiledTransform с C#, как

 XslCompiledTransform proc = new XslCompiledTransform(); 
     proc.Load("XSLTFile1.xslt"); 

     proc.Transform("XMLFile1.xml", "Result1.html"); 

Вам придется перекодировать это на C++/CLI, но этот подход должен быть ясным.

+0

Да, это работает для создания HTML-файла с шестнадцатеричным значением Unicode, хотя XML имеет специальный символ. Благодарю. –

+0

И я могу сделать практически то же самое, чтобы получить выходной XML, чтобы показать шестнадцатеричный код, установив XMLWriterSettings.Encoding = Encoding.ASCII ... в случае, если кто-то еще заинтересовался. –

2

Ваше помещение выглядит неисправным. Если HTML ссылаться на символ, используя шестнадцатеричную цифровую ссылку на символ, не будет делать слепой бит разницы в простоте написания преобразования XSLT для создания RTF-файла из (X) HTML: разница между символами, присутствующими в ввод в «литеральной форме» (если можно так выразиться), и символы, присутствующие в силу числовой ссылки на символ, не видны в модели данных, используемой XSLT.

Если вы создавали RTF с СЭД, или какой-либо другой не-XML-осведомленный инструмент, или с помощью инструмента XML, который используется модель данных, в которой разница между a и &#x0061; и &#97; видна (я не знать какие-либо, но такие инструменты можно себе представить), то лучше всего будет указать выходную кодировку US-ASCII, которая заставит процессор XSLT использовать числовые ссылки на символы для всех символов, отличных от ASCII.Процессоры XSLT, с которыми я работал, по умолчанию предпочитают десятичные шестнадцатеричные NCR, которые могут быть утомительными; вам может быть повезло больше, или вы обнаружите, что можете написать свой sed для работы с десятичными NCR.

Если вы решили записать шестнадцатеричную числовую ссылку, введите ад или высокую воду, вам нужно будет прочитать «disable-output-escaping». Я не буду описывать, как использовать его здесь, отчасти потому, что мне никогда не приходилось использовать его всерьез, а отчасти потому, что (как указано выше) я не думаю, что это действительно поможет вам в том, что вы действительно хотите сделать ,

+0

Спасибо за комментарий. Я нашел намного более простой способ выполнить то, что я пытался получить с RTF-файлом в любом случае. –

Смежные вопросы