0

XMLTextWriter.WriteStartElement が例外をスローすることに問題があります。

System.InvalidOperationException

XML ドキュメントに 2 番目の要素を書き込もうとしたとき。
このエラーは、「The Writer is closed」として返されます。クローズしていないので、範囲外になっているのではないでしょうか??
XMLTextWriter をクラス内のオブジェクトとして使用して、XML ファイルを書き込むクラスを作成しました。以下は関連するコードです。まったく同じ問題で回答されていない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)
4

1 に答える 1

1

私が知る限り、複数のルート要素を作成しようとしているようです.1つはリストメンバー用でDateTimeAdded、もう1つはリストメンバー用です。

呼び出すと、有効な XML が得WriteStartElementられCreateXml()ます。もちろん、ドキュメントを終了する前に、その要素を終了する必要があります。

(そして、はい、codeguru の投稿は同じことをしようとしているようです。)

基本的に、これは有効な XML ドキュメントです。

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

しかし、これはそうではありません:

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

あなたは後者をやろうとしていたので、問題です。

于 2009-09-08T19:46:18.753 に答える