2009-10-23 71 views
1

我正在使用VB.net写出一个XML文件。当我尝试创建另一个要写入第一个元素时,它会出错:XmlWriter不在VB.net中创建新元素

“状态EndRootElement中的令牌StartElement会导致无效的XML文档。请确保ConformanceLevel设置设置为ConformanceLevel.Fragment或ConformanceLevel.Auto,如果你想写一个XML片段。“

我不知道为什么它考虑到前一个元素已经关闭了。我试图寻找一个writer.WriteEndRootElement,但我没有看到任何内容。任何建议让它起作用? =)

Private Sub writeXMLFile(ByVal childform As Fone_Builder_Delux.frmData, ByVal filename As String) 

     Dim xmlSettings As New XmlWriterSettings() 
     xmlSettings.Indent = True 
     xmlSettings.NewLineOnAttributes = True 

     Using writer As XmlWriter = XmlWriter.Create(filename, xmlSettings) 

      writer.WriteStartDocument() 
      writer.WriteStartElement("header") 

      writer.WriteStartAttribute("filepath") 
      writer.WriteValue(filename) 
      writer.WriteEndAttribute() 

      writer.WriteEndElement() 
      writer.WriteStartElement("variable") 
      writer.WriteStartAttribute("varName") 

      writer.WriteValue(childform.datagridHeaders.Item(0, 1)) 

      writer.WriteEndAttribute() 
      writer.WriteEndElement() 
      writer.WriteEndDocument() 
      writer.Flush() 

     End Using 


    End Sub 

回答

6

XML文档只能有一个根元素。您正在启动文档,编写“header”元素,关闭“header”元素,然后启动一个新的“变量”元素 - 这将是第二个根元素。

要么将​​“标题”和“变量”都包含在单个更高级元素中,要么将其中一个移动到另一个中。

+0

谢谢你,我不知道,关于XML文件。我可能会把它们放在一个主元素中。谢谢! – 2009-10-23 04:54:56

1

你可以尝试这样的事情

Private Sub writeXMLFile(ByVal childform As Fone_Builder_Delux.frmData, ByVal filename As String) 

    Dim xmlSettings As New XmlWriterSettings() 
    xmlSettings.Indent = True 
    xmlSettings.NewLineOnAttributes = True 

    Using writer As XmlWriter = XmlWriter.Create(filename, xmlSettings) 

     writer.WriteStartDocument() 
     writer.WriteStartElement("root") 
     writer.WriteStartElement("header") 

     writer.WriteStartAttribute("filepath") 
     writer.WriteValue(filename) 
     writer.WriteEndAttribute() 

     writer.WriteEndElement() 
     writer.WriteStartElement("variable") 
     writer.WriteStartAttribute("varName") 

     writer.WriteValue(childform.datagridHeaders.Item(0, 1)) 

     writer.WriteEndAttribute() 
     writer.WriteEndElement() 
     writer.WriteEndElement() 
     writer.WriteEndDocument() 
     writer.Flush() 

    End Using 


End Sub