XmlDocument.InnerXml имеет значение NULL, но InnerText не имеет - PullRequest
1 голос
/ 07 мая 2010

Я использую XmlDocument и XmlElement для создания простого (но большого) XML-документа, который выглядит примерно так:

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

Моя проблема заключается в том, что когда я закончу сборку XMLXmlDocument.InnerXml равно нулю, но InnerText по-прежнему показывает весь текст всех дочерних узлов.

Кто-нибудь когда-либо сталкивался с подобной проблемой?Какие входные данные могут вызвать эти симптомы?Я ожидал, что XmlDocument просто сгенерирует исключение, если ему были переданы неверные данные.

Примечание : я почти уверен, что это связано с входными данными, поскольку я могу только воспроизвести ихпротив определенных наборов данных.Я также попытался экранировать данные с помощью SecurityElement.Escape , но это не имело никакого значения.

EDIT Вот код, который я использую для построения 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

1 Ответ

0 голосов
/ 15 февраля 2011

пытались ли вы нормализовать XMLDocument после добавления всех элементов и перед попыткой чтения InnerXml или OuterXML?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...