То, что я пытаюсь сделать, является более сложным, чем это, но я пытаюсь преодолеть это препятствие.
Допустим, у меня был текстовый файл с таким содержимым:
LINE1
LINE2
LINE3
И я хотел, чтобы каждая из этих строк была преобразована в файл XML, в котором каждая строка была дочерним элементом предыдущей строки.
Выход должен быть:
<LINE1>
<LINE2>
<LINE3>
</LINE3>
</LINE2>
</LINE1>
Я пробовал несколько подходов, используя Linq для XML и XML DOM, и всегда получаю это:
<LINE1>
<LINE2>
<LINE3>
</LINE1> or some variation of that.
Кажется, оно не поддерживает глубокое дерево.
Я прочитал страницы страниц различных книг по LINQ to XML и несколько статей по XML DOM.
Кажется, что я мог бы потратить это время на написание программы на VB.NET, которая просто записывала бы текст с помощью StreamWriter.
Я думал, что у меня был прорыв, когда я обнаружил, что вы можете просто использовать метод .ADD и не указывать элемент.
Я хотел бы показать вам некоторый код, но он действительно запутанный.
Для простоты я добавлю простой код, а затем другой код.
Но я пытаюсь сделать намного больше с моим кодом, чем этот пример.
Private Sub BuildTree()
Dim elementList As New StreamReader("c:\thisfile.txt")
'The file contents vary
Do While elementList.Peek() >= 0
' code here to build the xml
' each line would add a new element that would be a child
' of the previous element
Loop
' Desired results "nested" elements
'<LINE1>
' <LINE2>
' <LINE3>
' </LINE3>
' </LINE2>
'</LINE1>
End Sub
' Here is the the code that I was experimenting with:
' I would get an object not set to a reference of an object error
Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
Dim isaElement As New XElement("DOC")
Dim element2Add As New XElement("NONAME")
element2Add.Name = isaElement.Name
Dim elementNames As New ArrayList
elementNames.Add("ISA")
elementNames.Add("GS")
elementNames.Add("ST")
Dim lastElement As New XElement("LAST")
Dim i As Integer = 0
For i = 0 To elementNames.Count - 1
element2Add = New XElement(elementNames(i).ToString)
If i = 0 Then
isaElement.Element("DOC").Add(elementNames(i))
Else
lastElement.Element(lastElement.Name).Add(element2Add)
End If
Next
isaElement.Save("c:\temp.xml")
Me.Close()
End Sub
'Я действительно ценю помощь. Я работал с этим всю неделю.