Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » .NET - Импорт XML файла в Visual Basic 2010

Ответить
Настройки темы
.NET - Импорт XML файла в Visual Basic 2010

Пользователь


Сообщения: 66
Благодарности: 7

Профиль | Отправить PM | Цитировать


Изменения
Автор: neo21
Дата: 04-06-2012
Доброго времени суток.
Есть 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>

Отправлено: 23:24, 03-06-2012

 

В Поисках Истины


Сообщения: 802
Благодарности: 135

Профиль | Отправить PM | Цитировать


а структура этого 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 не знаком, могут быть ошибки...

-------
foreach(short w in new short[] {73,3,79,83,90,79,78,69}){
Console.Write((char)w);
}


Последний раз редактировалось LilLoco, 04-06-2012 в 14:14.

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:56, 04-06-2012 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 66
Благодарности: 7

Профиль | Отправить PM | Цитировать


Цитата LilLoco:
а структура этого xml именно нужна такая? »
Да

LilLoco, Спасибо большое, все работает.

Отправлено: 14:15, 04-06-2012 | #12


В Поисках Истины


Сообщения: 802
Благодарности: 135

Профиль | Отправить PM | Цитировать


neo21, Обращайтесь

-------
foreach(short w in new short[] {73,3,79,83,90,79,78,69}){
Console.Write((char)w);
}

Это сообщение посчитали полезным следующие участники:

Отправлено: 14:28, 04-06-2012 | #13


Пользователь


Сообщения: 66
Благодарности: 7

Профиль | Отправить PM | Цитировать


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":


Отправлено: 19:03, 04-06-2012 | #14


В Поисках Истины


Сообщения: 802
Благодарности: 135

Профиль | Отправить PM | Цитировать


neo21, Сейчас я вам не могу точно сказать. Но у XmlNode есть свойства различные, среди которых есть даже "полное описание узла". Можно использовать его, парсить, выбирать номер строки, и дальше не сложная логика в какую строку вносить... Те строки, которые не нужны, просто все пустыми вставляете...

Теоретически так... На практике смогу только завтра посмотреть...
Покопайтесь в свойствах, может можно и проще сделать...

-------
foreach(short w in new short[] {73,3,79,83,90,79,78,69}){
Console.Write((char)w);
}

Это сообщение посчитали полезным следующие участники:

Отправлено: 19:32, 04-06-2012 | #15



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » .NET - Импорт XML файла в Visual Basic 2010

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - [решено] Открытие файла Excel в Visual Basic 2010 neo21 Программирование и базы данных 18 27-07-2016 14:22
Разное - [решено] Импорт таблицы Excel в Visual Basic 2010 neo21 Программирование и базы данных 13 28-11-2011 00:22
Разное - [решено] DataGridView в Visual Basic 2010 neo21 Программирование и базы данных 2 22-11-2011 02:48
Разное - [решено] Переименование файла в в Visual Basic 2010 neo21 Программирование и базы данных 4 06-11-2011 12:11
Разное - [решено] Progressbar в Visual Basic 2010 neo21 Программирование и базы данных 4 30-10-2011 16:29




 
Переход