Глядя на этот вопрос Daniweb один из ответов, кажется, работает. Он предлагает создать FileStream самостоятельно с опцией добавления, а затем использовать этот поток при создании XmlTextWriter. Вам нужно проверить, существует ли файл, чтобы писать XmlHeader только один раз.
Dim writeStart As Boolean
If Not IO.File.Exists("C:\temp\doc.xml") Then writeStart = True
Dim xmlFile As IO.FileStream = New IO.FileStream("c:\temp\doc.xml", IO.FileMode.Append)
Dim myXmlTextWriter As New XmlTextWriter(xmlFile, System.Text.Encoding.Default)
With myXmlTextWriter
.Formatting = Formatting.Indented
.Indentation = 3
.IndentChar = CChar(" ")
If writeStart Then .WriteStartDocument()
.WriteComment("Data for 3030")
.WriteStartElement("3030")
.WriteElementString("jod", "364887")
.WriteElementString("aag_SN", "782 YvV0007")
.WriteElementString("te", "9.03")
.WriteFullEndElement()
.Close()
End With
Я внес некоторые изменения из-за множественного корневого объекта, читатель xmlDocument также жалуется на ваши теги, начинающиеся с цифры, т. Е. «3030», поэтому я добавил символ альфа. Я использую XmlTextWriter только для создания файла:
Dim writeStart As Boolean
If Not IO.File.Exists("C:\temp\doc.xml") Then writeStart = True
Dim xmlFile As IO.FileStream = New IO.FileStream("c:\temp\doc.xml", IO.FileMode.Append)
Dim myXmlTextWriter As New XmlTextWriter(xmlFile, System.Text.Encoding.Default)
If writeStart Then
With myXmlTextWriter
.Formatting = Formatting.Indented
.Indentation = 3
.IndentChar = CChar(" ")
.WriteStartDocument()
.WriteStartElement("root")
.WriteEndElement()
End With
End If
myXmlTextWriter.Close()
AddXmlData("c:\temp\doc.xml", "a3030", "364887", "782 YvV0007", "9.03")
Добавить Я использую этот Sub для добавления ваших данных:
Private Sub AddXmlData(xmlfile As String, index As String, jod As String, aag_SN As String, te As String)
Dim myXmlDocument As New XmlDocument
Dim myNodes, myChildren As XmlNodeList
Dim node(3) As XmlNode
myXmlDocument.Load(xmlfile)
myNodes = myXmlDocument.GetElementsByTagName("root")
For Each n As XmlNode In myNodes
If n.Name = "root" Then
myChildren = n.ChildNodes
For Each n1 As XmlNode In myChildren
If n1.Name = index Then
node(1) = myXmlDocument.CreateNode(System.Xml.XmlNodeType.Element, "jod", "")
node(2) = myXmlDocument.CreateNode(System.Xml.XmlNodeType.Element, "aag_SN", "")
node(3) = myXmlDocument.CreateNode(System.Xml.XmlNodeType.Element, "te", "")
node(1).InnerText = jod
node(2).InnerText = aag_SN
node(3).InnerText = te
n1.AppendChild(node(1))
n1.AppendChild(node(2))
n1.AppendChild(node(3))
myXmlDocument.Save(xmlfile)
Exit Sub
End If
Next
node(0) = myXmlDocument.CreateNode(XmlNodeType.Element, index, "")
node(1) = myXmlDocument.CreateNode(System.Xml.XmlNodeType.Element, "jod", "")
node(2) = myXmlDocument.CreateNode(System.Xml.XmlNodeType.Element, "aag_SN", "")
node(3) = myXmlDocument.CreateNode(System.Xml.XmlNodeType.Element, "te", "")
node(1).InnerText = jod
node(2).InnerText = aag_SN
node(3).InnerText = te
node(0).AppendChild(node(1))
node(0).AppendChild(node(2))
node(0).AppendChild(node(3))
n.AppendChild(node(0))
myXmlDocument.Save(xmlfile)
End If
Next
End Sub
Что создает xmlDocument, похожий на это:
<?xml version="1.0" encoding="Windows-1252"?>
<root>
<a3030>
<jod>364887</jod>
<aag_SN>782 YvV0007</aag_SN>
<te>9.03</te>
<jod>364887</jod>
<aag_SN>782 YvV0007</aag_SN>
<te>9.03</te>
<jod>364887</jod>
<aag_SN>782 YvV0007</aag_SN>
<te>9.03</te>
<jod>364887</jod>
<aag_SN>782 YvV0007</aag_SN>
<te>9.03</te>
</a3030>
</root>