在创建第二个元素期间,XmlTextWriter以System.InvalidOperationException响应

时间:2009-09-08 19:42:54

标签: vb.net xmltextwriter

我遇到了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)

1 个答案:

答案 0 :(得分:1)

据我所知,您似乎正在尝试创建多个根元素 - 一个用于DateTimeAdded,另一个用于列表成员。

如果您在WriteStartElement中致电CreateXml(),您最终会获得有效的XML。当然,在结束文档之前,您需要结束该元素。

(是的,codeguru帖子看起来像是在尝试做同样的事情。)

基本上,这是一个有效的XML文档:

<RootElement>
  <FirstElement>
    Content
  </FirstElement>
  <SecondElement>
    Content
  </SecondElement>
</RootElement>

但这不是:

<FirstElement>
  Content
</FirstElement>
<SecondElement>
  Content
</SecondElement>

你试图做后者,因此问题。