C#:XmlTextWriter.WriteElementString 在空字符串上失败?

标签 c# xml xmltextwriter

我正在使用 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();

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

如果你想多次这样做,你可以创建一个扩展方法:

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();

关于C#:XmlTextWriter.WriteElementString 在空字符串上失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1176202/

相关文章:

c# - 试图压缩我的 C#

java - Glassfish 基本身份验证错误

c# - XmlTextWriter 和 XmlWriter 有什么区别?

c# - 如何保存具有多个缩进设置的 XmlDocument?

c# - 使用带有返回值的 C# CodeBehind 调用 jQuery 函数

c# - 发生 PinvokeStackImbalance。抛出了这个异常,但我不知道错误是什么?

java - 是否还有其他方法可以除了 option.ifpresent() 之外检查值是否已填充

C# System.Xml.Serialization - 仅使用 <a></a> 而从不使用 <a/>

c# - 当你拥有 Rich Models 时你会做什么?

java - 使用 JAXB 将 CSV 转换为 XML?