C#:XmlTextWriter.WriteElementString在空字符串上失败?
我正在使用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输出是:
value value
但是,如果例如inputEmail为空,则得到结果XML,如下所示:
value
而我希望它是:
value
我究竟做错了什么? 有没有办法使用XmlTextWriter
以简单的方式实现我的预期结果?
你的输出是正确的。 没有内容的元素应该写为
。
您可以通过调用WriteFullEndElement()强制使用完整标记
writer.WriteStartElement("Email"); writer.WriteString(inputEmail); writer.WriteFullEndElement();
当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();
它不会失败
只是
的快捷方式
你的代码应该是:
using (XmlWriter writer = XmlWriter.Create("filename.xml")) { writer.WriteStartElement("User"); writer.WriteElementString("Username", inputUserName); writer.WriteElementString("Email", inputEmail); writer.WriteEndElement(); }
这可以避免在exception情况下资源泄漏,并使用正确的方法创建XmlReader(自.NET 2.0起)。
离开这里,万一有人需要它; 因为上面的答案都没有为我解决,或者看起来有点矫枉过正。
FileStream fs = new FileStream("file.xml", FileMode.Create); XmlWriterSettings settings = new XmlWriterSettings(); settings.Indent = true; XmlWriter w = XmlWriter.Create(fs, settings); w.WriteStartDocument(); w.WriteStartElement("tag1"); w.WriteStartElement("tag2"); w.WriteAttributeString("attr1", "val1"); w.WriteAttributeString("attr2", "val2"); w.WriteFullEndElement(); w.WriteEndElement(); w.WriteEndDocument(); w.Flush(); fs.Close();
诀窍是设置XmlWriterSettings.Indent = true并将其添加到XmlWriter 。
编辑:
或者你也可以使用
w.Formatting = Formatting.Indented;
而不是添加XmlWriterSettings。