AnieMVC Ответов: 1

Как передать строку в виде XML-документа?


Когда я попытался передать строку в качестве xml-документа с помощью string writer, я получаю недопустимую xml-строку.

то, что я ожидал, это
<?xml version="1.0" encoding="utf-8" standalone="yes"?><data><child>myvalue</child></data>


Но я получаю
<?xml version=\"1.0\" encoding=\"utf-16\" standalone=\"yes\"?><data><child>myvalue</child></data>


Есть "\" характер и его в кодировке UTF-16

Что я уже пробовал:

защищенная строка BuildFindXmlSTR(string AgentName)
{
Настройка XmlWriterSettings = новые настройки XmlWriterSettings();
установка.Кодировка = Кодировка.Кодировке utf8;
string test = строка.Пустой;


Проверьте новое окно инструментов();

используя (stringwriter не писатель = новый stringwriter не(СБ))
используя (XmlWriter w = XmlWriter.Создать(писатель, установка))
{


Вт.WriteStartDocument(правда);
w.WriteStartElement("данные");

Вт.WriteElementString("ребенок", "значения MyValue");

w.WriteEndElement();//данные


}

тест = СБ.Метод toString();
проверка возврата ;

}

1 Ответов

Рейтинг:
8

Kris Lantz

Stringwriter не собирается заставлять формате UTF16 кодировке, переписывая объекта XmlWriter в формате utf8 обстановке. Вам необходимо рассказать SW, что вы хотите, только в кодировке utf8 кодировать. Опять же, взгляните на ответ Джона Скита здесь о подклассах кодировки UTF StringWriter.
c# - XmlWriter для записи в строку, а не в файл - переполнение стека[^]

Правка: быстрый и грязный мэшап примера Джона и вашего кода. Возвращает utf-8.

public class Utf8StringWriter : StringWriter
{
    public override Encoding Encoding
    {
        get { return Encoding.UTF8; }
    }
}

protected static string BuildFindXmlSTR(string AgentName)
{
    string test = string.Empty;

    using (TextWriter writer = new Utf8StringWriter())
    {
        using (XmlWriter w = XmlWriter.Create(writer))
        {
            w.WriteStartDocument(true);
            w.WriteStartElement("data");

            w.WriteElementString("child", "myvalue");

            w.WriteEndElement();//data
        }
        return writer.ToString();
    }
}


0x01AA

+5 выглядит нормально
[Редактировать]
Не знаю, что здесь происходит. На два одинаковых вопроса были даны два почти одинаковых ответа. Я буду следить за этим....

Kris Lantz

Странно, что вопрос почти идентичен первому разу, но, возможно, решения, которое я предложил ранее, было недостаточно. Я решил, что упоминание ответа Джона конкретно и попытка показать, что он делает (я думаю) то, что ищет ОП, были лучшим вариантом здесь.