我正在使用XmlTextWriter及其WriteElementString方法,例如:

XmlTextWriter writer = new XmlTextWriter("filename.xml", null);

writer.WriteStartElement("User");
writer.WriteElementString("Username", inputUserName);
writer.WriteElementString("Email", inputEmail);
writer.WriteEndElement();

writer.Close();

预期的XML输出为:
<User>
    <Username>value</Username>
    <Email>value</Email>
</User>

但是,例如,如果inputEmail为空,则得到的结果XML如下所示:
<User>
    <Username>value</Username>
    <Email/>
</User>

而我希望它是:
<User>
    <Username>value</Username>
    <Email></Email>
</User>

我究竟做错了什么?有没有一种方法可以使用XmlTextWriter以一种简单的方式实现我的预期结果?

最佳答案

您的输出是正确的。没有内容的元素应写为<tag/>

您可以通过调用WriteFullEndElement()强制使用完整标签。

writer.WriteStartElement("Email");
writer.WriteString(inputEmail);
writer.WriteFullEndElement();

当inputEmail为空时,将输出<Email></Email>

如果您想多次执行此操作,则可以创建一个扩展方法:
public static void WriteFullElementString(this XmlTextWriter writer,
                                          string localName,
                                          string value)
{
    writer.WriteStartElement(localName);
    writer.WriteString(value);
    writer.WriteFullEndElement();
}

然后您的代码将变为:
writer.WriteStartElement("User");
writer.WriteFullElementString("Username", inputUserName);
writer.WriteFullElementString("Email", inputEmail);
writer.WriteEndElement();

09-06 00:38