 |
|
Импорт XML файла в Visual Basic 2010
Доброго времени суток.
Есть XML файл:
Код:
<?xml version="1.0" encoding="windows-1251"?>
<document>
<data>
<next1>777</next1>
<next2>888</next2>
<next3>999</next3>
<next4 ROWNUM="1">1</next4>
<next4 ROWNUM="2">2</next4>
<next4 ROWNUM="3">3</next4>
<next4 ROWNUM="4">4</next4>
</data>
</document>
С помощью программы:
Код:
Код:
Imports System.Xml
Imports System.Data
Public Class Form1
#Region "XML"
Public Shared Function EmptyStringToNull(ByVal o As String) As Object
Dim ret As Object = DBNull.Value
Try
If o.Trim.Length = 0 Then
ret = DBNull.Value
Else
ret = o
End If
Catch ex As Exception
End Try
Return ret
End Function
Private Sub ReadXMLFile()
Dim xmlDoc As New System.Xml.XmlDocument
Dim root As XmlElement = Nothing
Dim nodes As XmlNodeList = Nothing
Dim node As XmlNode = Nothing
Dim xmlFile As String = ""
Try
OpenFileDialog1.ShowDialog()
xmlFile = OpenFileDialog1.FileName
xmlDoc.Load(xmlFile)
root = xmlDoc.DocumentElement
nodes = root.SelectNodes("//document/data") 'The XMLPath
Me.DataGridView1.Rows.Clear() 'Clear Grid
For Each node In nodes
Me.DataGridView1.Rows.Add(EmptyStringToNull(node("next1").InnerText), EmptyStringToNull(node("next2").InnerText), EmptyStringToNull(node("next3").InnerText), EmptyStringToNull(node("next4").InnerText))
Next
Catch ex As Exception
End Try
End Sub
#End Region
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
ReadXMLFile()
End Sub
End Class
Я загружаю данные из XML файла в DataGridView1.
Как сделать, чтобы в столбец next4 грузились все данные:
Код:
<next4 ROWNUM="2">2</next4>
<next4 ROWNUM="3">3</next4>
<next4 ROWNUM="4">4</next4>
|
Цитата:
Цитата neo21
в столбец next4 грузились все данные: »
|
Т.е. в одну ячейку все 4 данных? или как? Покажи на примере Excel, каким ты хочешь видеть результат.
|
Цитата:
Цитата Delirium
Покажи на примере Excel, каким ты хочешь видеть результат. »
|

|
Чтобы так отобразить, необходимо определить количество записей next4. И потом в цикле добавлять строки. Причем на первой итерации добавить все данные (next1,next2,next3,next4(1 значение)), а на последующих итерациях добавлять только лишь строки с данными из next4.
|
Цитата:
Цитата LilLoco
а на последующих итерациях добавлять только лишь строки с данными из next4 »
|
Не пойму как добавить строки с данными из next4
Куда ставить:
ROWNUM="2"
ROWNUM="3"
ROWNUM="4"
|
Если не сложно и не секретно можно выложить проект и *.xml файл? Будет проще разобраться =)
|
LilLoco, Так он есть
Цитата:
Цитата neo21
Код:
<?xml version="1.0" encoding="windows-1251"?>
<document>
<data>
<next1>777</next1>
<next2>888</next2>
<next3>999</next3>
<next4 ROWNUM="1">1</next4>
<next4 ROWNUM="2">2</next4>
<next4 ROWNUM="3">3</next4>
<next4 ROWNUM="4">4</next4>
</data>
</document> »
|
Могу файлом загрузить.
|
Еще бы сам проект =) Чтобы не писать код самостоятельно...
|
LilLoco, Ок, через 30 мин.
|
а структура этого xml именно нужна такая?
Ну в общем вот какая картина:
У типа XmlNode есть свойство NextSibling, которое, как я понял, пока есть еще элементы с одним "названием" next4 возвращает следующий XmlNode.
То есть получается так:
Код:
Dim XN As XmlNode = Nothing
...........
XN = node("next4")
при добавлении первой строки берем XN.InnerText
While(пока есть еще элементы)
XN = XN.NextSibling;
Me.DataGridView1.Rows.Add("", "", "", XN.InnerText)
EndWhile
Осталось сделать проверку на существование других элементов.
P.S. C VB не знаком, могут быть ошибки...
|
Цитата:
Цитата LilLoco
а структура этого xml именно нужна такая? »
|
Да
LilLoco, Спасибо большое, все работает.
|
LilLoco, А как сделать если, XML фаил будет иметь такой вид:
Код:
<?xml version="1.0" encoding="windows-1251"?>
<document>
<data>
<next1>777</next1>
<next2>888</next2>
<next3>999</next3>
<next4 ROWNUM="2">1</next4>
<next4 ROWNUM="4">2</next4>
<next4 ROWNUM="6">3</next4>
<next4 ROWNUM="8">4</next4>
</data>
</document>
То есть ROWNUM="2", ROWNUM="4", ROWNUM="6", ROWNUM="8" номера строк
Если делаю так:
Код:
For Each node In nodes
Me.DataGridView1.Rows.Add(EmptyStringToNull(node("next1").InnerText), EmptyStringToNull(node("next2").InnerText), EmptyStringToNull(node("next3").InnerText), EmptyStringToNull(node("next4").InnerText))
Dim XN As XmlNode = Nothing
XN = node("next4")
For i = 0 To 100
XN = XN.NextSibling
Me.DataGridView1.Rows.Add("", "", "", XN.InnerText)
Next i
Next
То загружает подряд:
А надо в выбранные строки ROWNUM="2", ROWNUM="4", ROWNUM="6", ROWNUM="8":

|
neo21, Сейчас я вам не могу точно сказать. Но у XmlNode есть свойства различные, среди которых есть даже "полное описание узла". Можно использовать его, парсить, выбирать номер строки, и дальше не сложная логика в какую строку вносить... Те строки, которые не нужны, просто все пустыми вставляете...
Теоретически так... На практике смогу только завтра посмотреть...
Покопайтесь в свойствах, может можно и проще сделать...
|
Время: 05:22.
© OSzone.net 2001-