Как использовать XmlWriter для написания неправильно сформированного XML

#c# #xml #streamwriter #xmlwriter

#c# #xml #streamwriter #xmlwriter

Вопрос:

Во-первых, мне не нравится это делать. Это не мой выбор.

Мне нужно записать информацию в XML-документ. Простое содержимое xml может содержать amp;’s. Я хочу, чтобы они записывались в файл как просто amp; , а не amp;amp;

Как мне это сделать? Я предполагаю, что он включает StreamWriter и что-то вроде:

  private void SaveCaption_Click(object sender, EventArgs e)
    {
        if (saveCaptionDialog.ShowDialog() == DialogResult.OK)
        {
            using (StreamWriter writer = new StreamWriter(saveCaptionDialog.FileName, null))
            {
                using (XmlWriter xmlWriter = XmlWriter.Create(writer))
                {
                    xmlWriter.Formatting = Formatting.Indented;
                    xmlWriter.Indentation = 4;
                    xmlWriter.WriteStartDocument();
                    xmlWriter.WriteStartElement("tt");
                    ...
                    xmlWriter.WriteEndElement();
                    xmlWriter.WriteEndDocument();
                }
            }
            //streamWriter do your thing
        }

    }
  

Комментарии:

1. Записать все это в строку, а затем Replace("amp;amp;", "amp;") на нее?

2. Почему это не ваш выбор и почему вы бы сделали это И сохранили XML в качестве выбранного вами формата? Вы не сможете его разобрать!

3. @SpaceBison — Мое предположение? Потому что нам не всегда удается написать код для взаимодействия с системами, совместимыми со стандартами.

4. @antiduh Я признаю реальность вашего заявления, однако мне трудно хотеть иметь XML, который не может использоваться другой системой, без какой-либо «фиксации» его….

5. @SpaceBison Для видеопроигрывателя limelight, который мы используем, требуется документ xml для отображения подписей. Все способы кодирования ‘amp;’ отображаются как их эквивалент обычного текста (например, «amp;amp;»)

Ответ №1:

Пожалуйста, делайте это только в случае крайней необходимости; это не соответствует стандартам XML.

Только вы можете предотвратить срабатывание XML.

Используйте WriteRaw() метод:

         XmlWriter writer;

        writer = XmlWriter.Create( @"C:usersaccountdesktoptest.xml" );

        writer.WriteStartDocument();
        writer.WriteStartElement( "TestElement" );
        writer.WriteRaw( "Hello amp; goodbye" );
        writer.WriteEndElement();
        writer.WriteEndDocument();

        writer.Flush();
        writer.Close();
  

Который генерирует вывод:

 <?xml version="1.0" encoding="utf-8"?><TestElement>Hello amp; goodbye</TestElement>