I'm using XmlTextWriter
and its WriteElementString
method, for example:
XmlTextWriter writer = new XmlTextWriter("filename.xml", null);
writer.WriteStartElement("User");
writer.WriteElementString("Username", inputUserName);
writer.WriteElementString("Email", inputEmail);
writer.WriteEndElement();
writer.Close();
The expected XML output is:
<User>
<Username>value</Username>
<Email>value</Email>
</User>
However, if for example inputEmail is empty, the result XML I get as as follows:
<User>
<Username>value</Username>
<Email/>
</User>
Whereas I would expect it to be:
<User>
<Username>value</Username>
<Email></Email>
</User>
What am I doing wrong? Is there a way to achieve my expected result in a simple way using XmlTextWriter
?
Your output is correct. An element with no content should be written as
<tag/>
.You can force the use of the full tag by calling WriteFullEndElement()
That will output
<Email></Email>
when inputEmail is empty.If you want to do that more than once, you could create an extension method:
Then your code would become:
It doesn't fail
<Tag/>
is just a shortcut for<Tag></Tag>
Leaving this here in case someone needs it; since none of the answers above solved it for me, or seemed like overkill.
The trick was to set the XmlWriterSettings.Indent = true and add it to the XmlWriter.
Edit:
Alternatively you can also use
instead of adding an XmlWriterSettings.
Your code should be:
This avoids resource leaks in case of exceptions, and uses the proper way to create an XmlReader (since .NET 2.0).