Объединить файлы xml в один и распарсить итог в таблицу - Visual Basic .NET

Узнай цену своей работы

Формулировка задачи:

Задача - это некая идея фикс для меня, тем более очень для меня актуальна (нависает прям на до мной)) Поэтому решил попробовать решить ее на любимом VB.NET. Есть куча таких файлов .xml (см. прицеп). Их нужно собрать в один файл, но при этом удалить определенный тег или несколько тегов (к примеру <id>.*</id>). А результат разпарсить в текстовик... по оставшимся тегам. Сомневаюсь, что даже консольное приложение на VB.NET переварит в обозримые сроки большой объем таких файлов, особенно если каждый из них очень большой (по несколько метров). Но любопытно! Тем более ранее мне не приходилось работать в VB c xml... подучусь!

Решение задачи: «Объединить файлы xml в один и распарсить итог в таблицу»

textual
Листинг программы
Imports System.Text
Imports System.Xml
Imports System.Xml.Linq
Imports System.Xml.XPath
 
Sub Main
 
    Dim xmlSettings As New XmlWriterSettings() With { _
        .Encoding = Encoding.GetEncoding(1251), _
        .ConformanceLevel = ConformanceLevel.Document _
    }
    Using writer As XmlWriter = XmlWriter.Create("d:\result.xml", xmlSettings)
        
        writer.WriteStartDocument()
        writer.WriteStartElement("journal")
        
        ' Перебираем все xml файлы в папке d:\folder
        For Each xmlPath In Directory.EnumerateFiles("d:\folder", "*.xml")
            ProcessXmlDocument(xmlPath, writer)
        Next
        
        writer.WriteEndElement()
        writer.WriteEndDocument()
        
    End Using
    
End Sub
 
Sub ProcessXmlDocument(xmlPath As String, writer As XmlWriter)
 
    Dim xDoc As XDocument = XDocument.Load(xmlPath)
    
    ' Удаляем ненужные элементы
    For Each xEl As XElement In xDoc.XPathSelectElements("/journal/MainTable/id")
        xEl.Remove()
    Next
    
    ' Копируем данные из узлов MainTable
    Using reader As XmlReader = xDoc.Root.CreateReader()
        reader.ReadToDescendant("MainTable")
        Do While reader.NodeType = XmlNodeType.Element AndAlso reader.Name = "MainTable"
            writer.WriteNode(reader, False)
        Loop
    End Using
 
End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.2 из 5