XmlWriter ليس خلق العنصر الجديد في VB.net
سؤال
وأنا أكتب من ملف XML باستخدام VB.net. عندما أحاول خلق عنصر آخر لتكون مكتوبة الماضي أول، وأخطاء من قوله:
و"رمز StartElement في ولاية EndRootElement من شأنه أن يؤدي في وثيقة 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
المحلول
وثيقة XML يمكن أن يكون واحد فقط العنصر الجذر. كنت بدأت الوثيقة، كتابة "رأس" عنصر، وإغلاق "رأس" عنصر، ثم بدء الجديد "متغير" عنصر - الذي سيكون العنصر الجذر الثاني
وإما أرفق كل من "رأس" و "متغير" في غضون عنصر مستوى أعلى واحد، أو نقل واحد منهم داخل الآخر.
نصائح أخرى
ويمكنك أن تجرب شيئا من هذا القبيل
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