2015-09-04 123 views
0

我正在尝试写入xml然后读取它。我可以写成功,但是当我尝试读它,我得到以下错误:vb.net尝试写入和读取xml

型“System.Xml.XmlException”未处理的异常发生在system.xml.dll的

附加信息:数据在根级别无效。 1号线,位置1

这里是xml文件

<?xml version="1.0" encoding="utf-8" standalone="yes"?> 
<Settings> 
    <Variables> 
    <var_name>varsender</var_name> 
    <value>[email protected]</value> 
    </Variables> 
</Settings> 

这里是我的代码:

Imports System.Xml 

Public Class Form1 


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
     Dim writer As New XmlTextWriter(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) & "\Scripts\Test\testxml.xml", System.Text.Encoding.UTF8) 
     createNode("varsender", "[email protected]", writer) 
    End Sub 


    Private Sub createNode(ByVal varname As String, ByVal varvalue As String, ByVal writer As XmlTextWriter) 
     Dim settings As XmlWriterSettings = New XmlWriterSettings() 
     settings.OmitXmlDeclaration = True 
     settings.ConformanceLevel = ConformanceLevel.Fragment 
     settings.CloseOutput = False 

     writer.WriteStartDocument(True) 
     writer.Formatting = Formatting.Indented 
     writer.Indentation = 2 
     writer.WriteStartElement("Settings") 'name of first element 
     writer.WriteStartElement("Variables") 
     writer.WriteStartElement("var_name") 
     writer.WriteString(varname) 
     writer.WriteEndElement() 
     writer.WriteStartElement("value") 
     writer.WriteString(varvalue) 
     writer.WriteEndElement() 
     writer.WriteEndElement() 


     writer.WriteEndElement() 
     writer.WriteEndDocument() 
     writer.Close() 
    End Sub 

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click 

     Dim doc As XmlDocument = New XmlDocument() 
     doc.LoadXml(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) & "\Scripts\Test\testxml.xml") 

     Dim variable As String = doc.SelectSingleNode("/Settings/Variables[var_name='" & TextBox1.Text & "']/value") _ 
          .InnerText 


     TextBox2.Text = variable 

    End Sub 
End Class 

xml文件并不一定是什么特别的,我只是要用它来关闭变量并在变量上打开。

+0

http://stackoverflow.com/questions/7544475/data-at-the-root-level-is-invalid-line-1-position -1-why-do-i-get-this-error -w你需要使用'Load',而不是'LoadXml' –

回答

0

尝试XML的LINQ

Imports System.Xml 
 
Imports System.Xml.Linq 
 
Public Class Form1 
 

 
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click 
 
     Dim filename As String = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) & "\Scripts\Test\testxml.xml" 
 
     Dim doc As XDocument = Nothing 
 
     createNode("varsender", "[email protected]", doc) 
 
     doc.Save(filename) 
 
    End Sub 
 
    Private Sub createNode(ByVal varname As String, ByVal varvalue As String, ByRef doc As XDocument) 
 
     Dim identification As String = "<?xml version=""1.0"" encoding=""utf-8"" standalone=""yes""?><Settings></Settings>" 
 
     doc = XDocument.Parse(identification) 
 
     Dim settings As XElement = doc.FirstNode 
 

 
     Dim variables As New XElement("Variables", New Object() { 
 
             New XElement("var_name", varname), 
 
             New XElement("value", varvalue) 
 
             }) 
 
     settings.Add(variables) 
 

 
    End Sub 
 

 

 
End Class 
 
​