Вопрос или проблема
У меня есть атрибут Xml со значением select top(1) incidentid from Incident
. Я передаю это в XDocument.Parse(), но потом он удаляет все  
. Как я могу это сохранить?
Ответ или решение
Чтобы сохранить HTML-кодированные символы в атрибуте XML при использовании XDocument.Parse()
, необходимо учитывать две вещи: правильное кодирование входных данных и использование правильного метода для их обработки.
Ваша строка содержит HTML-кодированные символы, такие как  
, которые представляют пробел (кодировка 32 в шестнадцатеричном формате). XDocument.Parse()
в стандартной обработке строки интерпретирует эти символы и, соответственно, преобразует их в обычные пробелы.
Вот шаги, которые помогут вам сохранить HTML-кодированные символы без их преобразования:
-
Кодирование специальный символов: Прежде чем передать вашу строку
select top(1) incidentid from Incident
вXDocument.Parse()
, убедитесь, что вы правильно закодировали специальные символы, такие как&
, чтобы они не интерпретировались как управляющие символы XML. Нужно заменить&
на&
. -
Использование
XmlConvert
: Вы также можете использоватьSystem.Xml.XmlConvert
для кодирования строк перед передачей вXDocument
. Например, можно использовать методXmlConvert.EncodeName()
для кодирования имен, чтобы избежать конфликта с XML.
Пример кода:
using System;
using System.Xml;
using System.Xml.Linq;
class Program
{
static void Main()
{
string encodedValue = "select top(1) incidentid from Incident";
// Заменяем символ & на & для корректной обработки
string xmlString = $"<Root attribute=\"{encodedValue.Replace("&", "&")}\" />";
XDocument doc = XDocument.Parse(xmlString);
// Здесь вы можете работать с your XDocument
Console.WriteLine(doc);
// Чтобы получить оригинальное значение
string originalValue = doc.Root.Attribute("attribute").Value;
Console.WriteLine(originalValue); // вывод: select top(1) incidentid from Incident
}
}
В этом примере атрибут XML содержит строку с HTML-кодированными символами, и они сохраняются правильно при разборе. Если вам нужно снова получить значение в исходном виде, вы можете его вывести, но помните, что системные интерпретации &#32;
превратятся в пробелы.
Таким образом, кодируя специальную последовательность символов и оставаясь в рамках корректного XML, вы можете сохранить и работать с HTML-кодированным текстом в XDocument.Parse()
.