Forcing XDocument.ToString() to include the closing tag when there is no data

.net, c#, linq, linq-to-xml

Solution

Set the `Value` property of each empty `XElement` specifically to an empty string.

    // Note: This will mutate the specified document.
    private static void ForceTags(XDocument document)
    {
        foreach (XElement childElement in
            from x in document.DescendantNodes().OfType<XElement>()
            where x.IsEmpty
            select x)
        {
            childElement.Value = string.Empty;
        }
    }

Problem

I have a XDocument that looks like this: ``` XDocument outputDocument = new XDocument( new XElement("Document", new XElement("Stuff") ) ); ``` That when I call ``` outputDocument.ToString() ``` Outputs to this: ``` <Document> <Stuff /> </Document> ``` But I want it to look like this: ``` <Document> <Stuff> </Stuff> </Document> ``` I realize the first one is correct, but I am required to output it this way. Any suggestions?

Original source