如何用C#的XmlWriter类将空字符串写入XML文件?

时间:2012-03-17 23:10:16

标签: c# asp.net xml xmlwriter

我正在使用C#(在ASP.NET环境中)创建一个生成XML文件的程序。它使用XmlWriter类进行编写,但有一件事我不知道该怎么做。

说,写一个我做的字符串:

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

变为:

  

< c1> name< / c1>

这很好,直到我尝试写一个空字符串:

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

变为:

  

< c1 />

但是你如何格式化呢?

  

< c1>< / c1>

3 个答案:

答案 0 :(得分:3)

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 :(得分:1)

< c1/ >适用于空元素。就像你如何在html中使用< br/ >换行一样。

如果您不喜欢这种语法,虽然它是正确的,但您可以手动将包含/>的所有代码手动解析为<> </>。否则,也许您应该考虑使用xmlWriter.WriteElementString(“c1”,“”);

答案 2 :(得分:1)

从XML的角度来看,两种结构(<c1/><c1></c1>)都是相同的,因此兼容的阅读器很可能不会让您区分它们。如果您需要特殊的“null”值,请考虑使用专为此设计的xsi:nil(http://w3.org/TR/xmlschema-1/#xsi_nil)。

<c1 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>