我正在使用XmlDocument
和XmlElement
来构建一个简单(但很大)的XML文档,它看起来像:
<Widgets>
<Widget>
<Stuff>foo</Stuff>
<MoreStuff>bar</MoreStuff>...lots more child nodes
</Widget>
<Widget>...lots more Widget nodes
</Widgets>
我的问题是,当我完成构建XML时,XmlDocument.InnerXml
为空,但InnerText
仍显示所有子节点的所有文本。
有没有人见过这样的问题?什么样的输入数据会导致这些症状?我希望XmlDocument
只是在给出错误数据的情况下抛出异常。
注意:我很确定这与输入数据有关,因为我只能针对某些数据集重现它。我也尝试使用SecurityElement.Escape转义数据,但没有区别。
修改 这是我用来构建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
答案 0 :(得分:0)
在添加所有元素之后和尝试读取InnerXml或OuterXML之前,您是否尝试过规范化XMLDocument?