Vb.net小白代码报错求救贴!求大佬解答!

首先我需要获取一个文件夹下多个xml文件数据然后让这些数据以列表的形式转成一个csv文件

现在出现了一个问题:运行代码后只能获取到一个xml文件的数据,已经确定文件夹下面有多个.xml文件且没有重名。求大佬解答!

If objDBControl IsNot Nothing Then
                objDBControl.Connect()
                '文件路径检查
                GetFilePath()
                '获取xml文件数据
                Dim xmlDoc As New XmlDocument()
                'Dim xmlrow As New List(Of String)()
                '输出文件夹检查
                InspectOutputFolder()
                '将xml数据列表写入csv文件
                '加载xml文件’
                xmlDoc = ReadXmlData(xmlDoc)
                

                Try
                    '创建csv文件
                    Using sw As New StreamWriter(strcsvFilePath & "xmltocsv.csv", False, System.Text.Encoding.GetEncoding("Shift-JIS"))
                        '获取xml根元素
                        Dim xmlroot As XmlElement = xmlDoc.DocumentElement
                        '获取csv表头
                        Dim csvheader As New List(Of String)()
                        For Each xmlnode As XmlNode In xmlroot.ChildNodes
                            csvheader.Add(xmlnode.Name)
                        Next
                        sw.WriteLine(String.Join(",", csvheader))
                        '获取csv数据行
                        Dim csvData As New List(Of String)()
                        For i As Integer = 0 To xmlroot.ChildNodes.Count - 1
                            Dim strvalue As String = xmlroot.ChildNodes(i).InnerText()
                            strvalue = ChangeTargetField(strvalue)
                            csvData.Add(String.Join(",", strvalue))
                        Next
                        For Each strvalue As String In csvData
                            sw.WriteLine(String.Join(",", csvData))
                        Next
                        
                    End Using
                Catch ex As Exception
                    Console.WriteLine("xml文件转换未成功")
                End Try






                objDBControl.DisConnect()
            End If


        Catch ex As Exception
            Me.ErrLog(strMethodName, ex.Message)
        Finally
            Me.BusinessLog(strMethodName, "")
        End Try

    End Sub
#End Region
    Public Function GetFilePath() As String
        Dim intCount As Integer = 0
        '1.1检查参数数量
        Dim strArgs As String() = Environment.GetCommandLineArgs()
        If strArgs.Length <> 2 Then
            TraceLog(strMethodName, ConstModule.MSG101)
        End If
        '检查文件夹路径
        If String.IsNullOrEmpty(strxmlFolderPath) Then
            TraceLog(strMethodName, ConstModule.MSG102)
        End If
        If String.IsNullOrEmpty(strcsvFilePath) Then
            TraceLog(strMethodName, ConstModule.MSG103)
        End If
        ''检查文件扩展名
        If Path.GetExtension(strcsvFilePath).ToLower <> ".csv" Then
            TraceLog(strMethodName, ConstModule.MSG104)
        End If
        '检查文件夹
        If Not Directory.Exists(strxmlFolderPath) Then
            TraceLog(strMethodName, ConstModule.MSG105)
        End If
        Return intCount
    End Function

    '读取xml文件夹中数据
    Public Function ReadXmlData(xmlDoc As XmlDocument)
        '创建一个空的xml数据列表
        Dim listXmlDataList As New List(Of XmlDocument)()
        '创建xmldocument对象
        'Dim xmlDoc As New XmlDocument()
        '检查xml文件夹中是否存在xml文件
        If Directory.GetFiles(strxmlFolderPath, "*.xml").Length > 0 Then
            '遍历文件夹中所有xml文件
            For Each strxmlfiles As String In Directory.GetFiles(strxmlFolderPath)
                If strxmlfiles.EndsWith(".xml") Then
                    For Each strxmlfile As String In strxmlfiles
                        '获取xml文件中所有节点数据
                        Dim listallNodes As XmlNodeList = xmlDoc.SelectNodes("//*")
                        '创建一个新的节点列表
                        Dim nodelist As New List(Of XmlNode)
                        '遍历每个节点
                        For Each Node As XmlNode In listallNodes
                            nodelist.Add(Node)
                        Next
                    Next
                    '加载xml文件
                    xmlDoc.Load(strxmlfiles)
                        '将xml数据添加到列表中
                        listXmlDataList.Add(xmlDoc)
                    End If
            Next
        Else
            TraceLog(strMethodName, ConstModule.MSG106)
        End If
        Return xmlDoc
    End Function

    Public Function InspectOutputFolder() As String
        '1.3输出文件夹检查
        '检查输出目标文件夹是否存在,如果不存在则创造
        Dim stroutputFolder As String = Path.GetDirectoryName(strcsvFilePath)
        If Not Directory.Exists(stroutputFolder) Then
            Directory.CreateDirectory(stroutputFolder)
        End If
        '1.4csv存在性检查
        If File.Exists(strcsvFilePath) Then
            '如果csv文件已经打开,则显示一条消息
            Try
                Using File As New FileStream(strcsvFilePath, FileMode.Open, FileAccess.ReadWrite)
                    TraceLog(strMethodName, ConstModule.MSG107)
                End Using
            Catch ex As Exception
                Console.WriteLine("无法访问输出csv文件")
            End Try
            '如果csv存在,则删除现有csv文件
            Try
                File.Delete(strcsvFilePath)
            Catch ex As Exception
                Console.WriteLine("无法删除现有的csv文件")
            End Try
        End If
        Return 0
    End Function




    '根据规则对xml目标项目进行更改
    Public Function ChangeTargetField(strvalue As String) As String


        '对xml文件进行更改
        strvalue = strvalue.Replace("&amp", "&")
        strvalue = strvalue.Replace("&amp;nbsp;" & "&nbsp", " ")
        strvalue = strvalue.Replace("&amp;lt;" & "&lt", "<")
        strvalue = strvalue.Replace("&&amp;gt;" & "&gt", ">")
        '如果超过csv项目的字节数/位数,剪切多余部分
        Dim intcsvItemLength As Integer = 500 '实际csv项目的字节数
        If strvalue.Length > intcsvItemLength Then
            strvalue = strvalue.Substring(0, intcsvItemLength)
        End If
        Return strvalue
    End Function

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值