views:

235

answers:

0

I'm using XmlDocument and XmlElement to build a simple (but large) XML document that looks something like:

<Widgets>
    <Widget>
        <Stuff>foo</Stuff>
        <MoreStuff>bar</MoreStuff>...lots more child nodes
    </Widget>
    <Widget>...lots more Widget nodes
</Widgets>

My problem is that when I'm done building the XML, the XmlDocument.InnerXml is null, but the InnerText still shows all the text of all the child nodes.

Has anyone ever seen a problem like this before? What kind of input data would cause these symptoms? I expected the XmlDocument to just throw an exception if it was given bad data.

Note: I'm pretty sure this is related to the input data as I can only reproduce it against certain data sets. I also tried escaping the data with SecurityElement.Escape but it made no difference.

EDIT Here's the code I'm using to build the XML:

Private Function BuildXml(widgets as ICollection(Of MyNamespace.Widget)) As String
    Dim xDoc As New XmlDocument
    Dim parentNode As XmlElement = xDoc.CreateElement("Widgets")
    xDoc.AppendChild(parentNode)

    For Each w as Widget in widgets
        Dim widgetNode As XmlElement = xDoc.CreateElement("Widget")
        widgetNode.AppendChild(CreateElement(xDoc, w.Stuff, "Stuff"))
        // lots more...
        parentNode.AppendChild(widgetNode)
    Next

    Return xDoc.OuterXml
End Function

Private Function CreateElement(ByVal xDoc As XmlDocument, ByVal value As String, ByVal elementName As String) As XmlElement
    Dim element As XmlElement = xDoc.CreateElement(elementName)
    element.InnerText = System.Security.SecurityElement.Escape(value)

    Return element
End Function