我使用的是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为空,我得到的结果如下所示:
<User>
<Username>value</Username>
<Email/>
</User>然而,我希望它是:
<User>
<Username>value</Username>
<Email></Email>
</User>我做错了什么?有没有办法使用XmlTextWriter以一种简单的方式实现我的预期结果?
发布于 2009-07-24 07:22:09
您的输出是正确的。没有内容的元素应该写成<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();发布于 2009-07-24 07:21:40
它不会失败<Tag/>只是<Tag></Tag>的一个快捷方式
发布于 2009-07-24 13:22:51
你的代码应该是:
using (XmlWriter writer = XmlWriter.Create("filename.xml"))
{
writer.WriteStartElement("User");
writer.WriteElementString("Username", inputUserName);
writer.WriteElementString("Email", inputEmail);
writer.WriteEndElement();
}这避免了异常情况下的资源泄漏,并使用正确的方式创建XmlReader (从.NET 2.0开始)。
https://stackoverflow.com/questions/1176202
复制相似问题