Как сохранить HtmlEncoded текст в XDocument.Parse()?

Вопрос или проблема

У меня есть атрибут Xml со значением select top(1) incidentid from Incident. Я передаю это в XDocument.Parse(), но потом он удаляет все  . Как я могу это сохранить?

Ответ или решение

Чтобы сохранить HTML-кодированные символы в атрибуте XML при использовании XDocument.Parse(), необходимо учитывать две вещи: правильное кодирование входных данных и использование правильного метода для их обработки.

Ваша строка содержит HTML-кодированные символы, такие как  , которые представляют пробел (кодировка 32 в шестнадцатеричном формате). XDocument.Parse() в стандартной обработке строки интерпретирует эти символы и, соответственно, преобразует их в обычные пробелы.

Вот шаги, которые помогут вам сохранить HTML-кодированные символы без их преобразования:

  1. Кодирование специальный символов: Прежде чем передать вашу строку select top(1) incidentid from Incident в XDocument.Parse(), убедитесь, что вы правильно закодировали специальные символы, такие как &, чтобы они не интерпретировались как управляющие символы XML. Нужно заменить & на &.

  2. Использование 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("&", "&amp;")}\" />";

        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-кодированными символами, и они сохраняются правильно при разборе. Если вам нужно снова получить значение в исходном виде, вы можете его вывести, но помните, что системные интерпретации &amp;#32; превратятся в пробелы.

Таким образом, кодируя специальную последовательность символов и оставаясь в рамках корректного XML, вы можете сохранить и работать с HTML-кодированным текстом в XDocument.Parse().

Оцените материал
Добавить комментарий

Капча загружается...