Как записать пустую строку в файл XML с помощью класса C # XmlWriter? - PullRequest
0 голосов
/ 18 марта 2012

Я создаю программу с использованием C # (в среде ASP.NET), которая создает файл XML.Он использует класс XmlWriter для записи, но есть одна вещь, которую я не уверен, как это сделать.

Скажем, чтобы написать строку, которую я делаю:

xmlWriter.WriteElementString("c1", "name");

, которая становится:

name </ c1>

Это здорово, пока я не попытаюсь написать пустую строку:

xmlWriter.WriteElementString("c1", "");

, которая становится:

Но как вы отформатируете его?

</ c1>

Ответы [ 3 ]

3 голосов
/ 18 марта 2012
using (XmlWriter writer = new XmlTextWriter(stream)
{
    writer.WriteStartElement("c1") 
    writer.WriteString("") 
    writer.WriteFullEndElement()
}

РЕДАКТИРОВАТЬ: Вот проверяемый код.Не имеет значения, как вы создаете XmlWriter

public static void Main()
{
    using (StringWriter sw = new StringWriter())
    {
        using (XmlWriter xw = XmlWriter.Create(sw))
        {
            xw.WriteStartElement("c1");
            xw.WriteString(string.Empty);
            xw.WriteFullEndElement();
        }

        Console.Write(sw.ToString());  // Prints <c1></c1>
    }
}

Какую реализацию XmlWriter вы используете?

1 голос
/ 19 марта 2012

Оба конструкта (<c1/> и <c1></c1>) идентичны с точки зрения XML, поэтому весьма вероятно, что совместимый читатель не позволит вам различать их.Если вам нужно иметь специальное значение «null», рассмотрите возможность использования xsi: nil (http://w3.org/TR/xmlschema-1/#xsi_nil), который предназначен для этого.

<c1 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
1 голос
/ 18 марта 2012

< c1/ > подходит для пустого элемента. Очень похоже на то, как вы бы использовали < br/ > в html для новой строки.

Если вам не нравится этот синтаксис, хотя он и правильный, вы можете вручную проанализировать все теги, содержащие />, чтобы разбить их на <> </> вручную. В противном случае, возможно, вам следует рассмотреть возможность использования xmlWriter.WriteElementString ("c1", "");

...