我遇到了XMLTextWriter.WriteStartElement抛出异常的问题:
System.InvalidOperationException
尝试在我的XML文档中写入第二个元素时。
此错误以"The Writer is closed"的形式返回。我没有关闭它,所以我猜它已经超出了范围?我创建了一个类来编写XML文件,使用XMLTextWriter作为我的类中的对象。以下是相关代码。我在codeguru上发现了另一篇帖子,这篇文章从来没有回答过完全相同的问题。任何解决方法或其他方面的想法都将受到赞赏。
Function CreateXML()...
Try
_listDocument = New XmlTextWriter(_xmlDI.FullName & "\\" & currentFilename, Nothing)
CreateHeader()
AddTimeDateNode()
CreateXML = True
Catch xmlErr As XmlException
MsgBox("Unable to create temporary file(" & currentFilename & ") that is used to change your whitelist or blacklist. " & _
"More technical information: " & xmlErr.Message, MsgBoxStyle.Critical, "Can't Continue")
End Try
End Function
Function AddListMember(ByVal listType As String, ByVal listItem As String, ByVal action As String) As Boolean
_listDocument.WriteStartElement(listItem) <-- CODE THROWS EXCEPTION HERE!
_listDocument.WriteAttributeString("listType", listType)
_listDocument.WriteAttributeString("action", action)
_listDocument.WriteString(listItem)
_listDocument.WriteEndElement()
_listDocument.WriteWhitespace(Chr(13) & Chr(10) & "\t")
Return True
End Function
'Sets the XML header
Private Function CreateHeader() As Boolean
_listDocument.WriteStartDocument(False)
_listDocument.WriteWhitespace(Chr(13) & Chr(10))
Return True
End Function
'Add Time Date node
Private Function AddTimeDateNode() As Boolean
_listDocument.WriteStartElement("DateTimeAdded")
_listDocument.WriteString(DateTime.Now.ToString)
_listDocument.WriteEndElement()
_listDocument.WriteWhitespace(Chr(13) & Chr(10))
Return True
End Function
我在使用以下代码从ListXML(我的类的名称)实例化维度后调用这些函数:
Dim xmloutput As New ListXML
xmloutput.CreateXML()
xmloutput.AddListMember(xmloutput.ReturnWhiteList, currentItem.SenderEmailAddress, xmloutput.ReturnAddAction)
答案 0 :(得分:1)
据我所知,您似乎正在尝试创建多个根元素 - 一个用于DateTimeAdded
,另一个用于列表成员。
如果您在WriteStartElement
中致电CreateXml()
,您最终会获得有效的XML。当然,在结束文档之前,您需要结束该元素。
(是的,codeguru帖子看起来像是在尝试做同样的事情。)
基本上,这是一个有效的XML文档:
<RootElement>
<FirstElement>
Content
</FirstElement>
<SecondElement>
Content
</SecondElement>
</RootElement>
但这不是:
<FirstElement>
Content
</FirstElement>
<SecondElement>
Content
</SecondElement>
你试图做后者,因此问题。