C#:XmlTextWriter.WriteElementString对空字符串失败?
-
19-09-2019 - |
题
我使用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();
其他提示
它不会失败<Tag/>
仅仅是<Tag></Tag>
一个快捷方式
您的代码应该是:
using (XmlWriter writer = XmlWriter.Create("filename.xml"))
{
writer.WriteStartElement("User");
writer.WriteElementString("Username", inputUserName);
writer.WriteElementString("Email", inputEmail);
writer.WriteEndElement();
}
这避免了在例外的情况下,资源泄漏,并且使用适当的方式来创建一个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 =真 并把它添加到 的XmlWriter 即可。
的 编辑: 强>
可替换地也可以使用
w.Formatting = Formatting.Indented;
,而不是增加一个XmlWriterSettings
。
不隶属于 StackOverflow