使用VB.NET处理xml转换中的双引号 [英] Handle double quotes in xml conversion using VB.NET

查看:86
本文介绍了使用VB.NET处理xml转换中的双引号的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

下面是我输入的.csv文件和我我希望将此文件转换为xml格式:

Lable,name,add1,Add2,Add4,add5,Add3,pin,ref,in,date,cod,val ,val2,val3
$
RAMI,"RAMI,INC                ",                                        ,"RAMI,INC     
                    ",ABCS,"RAM,ME                              ",&IND NBSP;            
                       ,5325,2569 ,,,,,, 8574

,,,,,,,,, 6556,10 / 4/2018,IND,5698,0,6985

RAL,"RAL,LLC        ",                                        ,"RALS,LLC             
    ",6958 MADH                   ,"Hyd,TS                           ",&IND NBSP;          
                         ,54545,6958 ,,,,,, 12121

,,,,,,,,, 25698,10 / 24/2016,IND,2365.2,0,312.5

,,,,,,,,, 249469,10 / 26/2016,IND,85967.3,0,1507.3

,,,,,,,,, 249844,11 / 9/2016, ISD,987456.34,0,594.34

,,,,,,,,, 249965,11 / 14/2016,IDS,25874.38,0,905.38

BAL,"BALL,LLC  ;       ",                                        ,"BALL,LLC             
    ",6958 MADH                   ,"Hyd,TS                           ",&IND NBSP;          
                         ,54545,6958 ,,,,,, 12121

,,,,,,,,, 25698,10 / 24/2016,IND,2365.2,0,312.5

,,,,,,,,, 249469,10 / 26/2016,IND,85967.3,0,1507.3

Lable,name,add1,Add2,Add4,add5,Add3,pin,ref,in,date,cod,val,val2,val3
RAMI,"RAMI, INC                ",                                        ,"RAMI, INC                          ",ABCS,"RAM, ME                              ",IND                                     ,5325,2569,,,,,,8574
,,,,,,,,,6556,10/4/2018,IND,5698,0,6985
RAL,"RAL, LLC        ",                                        ,"RALS, LLC                  ",6958 MADH                   ,"Hyd, TS                           ",IND                                     ,54545,6958,,,,,,12121
,,,,,,,,,25698,10/24/2016,IND,2365.2,0,312.5
,,,,,,,,,249469,10/26/2016,IND,85967.3,0,1507.3
,,,,,,,,,249844,11/9/2016,ISD,987456.34,0,594.34
,,,,,,,,,249965,11/14/2016,IDS,25874.38,0,905.38
BAL,"BALL, LLC        ",                                        ,"BALL, LLC                  ",6958 MADH                   ,"Hyd, TS                           ",IND                                     ,54545,6958,,,,,,12121
,,,,,,,,,25698,10/24/2016,IND,2365.2,0,312.5
,,,,,,,,,249469,10/26/2016,IND,85967.3,0,1507.3

根据我的逻辑,我将如下所示:

<Payments>
  <P A01="Lable" A02="name" A03="add1" A04="Add2" A05="Add4" A06="add5" A07="Add3" A08="pin" A09="ref" A010="in" A011="date" A012="cod" A013="val" A014="val2" A015="val3" />
  <P A01="RAMI" A02="&quot;RAMI" A03="INC                &quot;" A04="" A05="&quot;RAMI" A06="INC                          &quot;" A07="ABCS" A08="&quot;RAM" A09="ME                              &quot;" A010="IND" A011="5325" A012="2569" A013="" A014="" A015="">
    <R A01="" A02="" A03="" A04="" A05="" A06="" A07="" A08="" A09="" A010="6556" A011="10/4/2018" A012="IND" A013="5698" A014="0" A015="6985" />
  </P>
  <P A01="RAL" A02="&quot;RAL" A03="LLC        &quot;" A04="" A05="&quot;RALS" A06="LLC                  &quot;" A07="6958 MADH" A08="&quot;Hyd" A09="TS                           &quot;" A010="IND" A011="54545" A012="6958" A013="" A014="" A015="">
    <R A01="" A02="" A03="" A04="" A05="" A06="" A07="" A08="" A09="" A010="25698" A011="10/24/2016" A012="IND" A013="2365.2" A014="0" A015="312.5" />
    <R A01="" A02="" A03="" A04="" A05="" A06="" A07="" A08="" A09="" A010="249469" A011="10/26/2016" A012="IND" A013="85967.3" A014="0" A015="1507.3" />
    <R A01="" A02="" A03="" A04="" A05="" A06="" A07="" A08="" A09="" A010="249844" A011="11/9/2016" A012="ISD" A013="987456.34" A014="0" A015="594.34" />
    <R A01="" A02="" A03="" A04="" A05="" A06="" A07="" A08="" A09="" A010="249965" A011="11/14/2016" A012="IDS" A013="25874.38" A014="0" A015="905.38" />
  </P>
  <P A01="BAL" A02="&quot;BALL" A03="LLC        &quot;" A04="" A05="&quot;BALL" A06="LLC                  &quot;" A07="6958 MADH" A08="&quot;Hyd" A09="TS                           &quot;" A010="IND" A011="54545" A012="6958" A013="" A014="" A015="">
    <R A01="" A02="" A03="" A04="" A05="" A06="" A07="" A08="" A09="" A010="25698" A011="10/24/2016" A012="IND" A013="2365.2" A014="0" A015="312.5" />
    <R A01="" A02="" A03="" A04="" A05="" A06="" A07="" A08="" A09="" A010="249469" A011="10/26/2016" A012="IND" A013="85967.3" A014="0" A015="1507.3" />
  </P>
</Payments>





但是,在这种情况下,"RAMI,INC" (csv文件的第二行)应被视为单个值,这应该是单个标记(A02 =" RAMI,INC")


But, in this scenario "RAMI, INC" (second line of csv file) is should be considered as single value and this should come in single tag (A02 = "RAMI, INC")


以下是使用的参考逻辑:

Below is the reference logic, which is used:

Dim filename As String = "C:\Users\ABC\Desktop\Example File.csv"
        Dim strxmlPath As String = "C:\Users\ABC\Desktop\1.xml"

        If File.Exists(strxmlPath) Then
            File.Delete(strxmlPath)
        End If
        Using w As XmlTextWriter = New XmlTextWriter(strxmlPath, Encoding.UTF8)

            w.WriteStartElement("Payments")

            Dim r As String = Nothing

            Dim theFile() As String = IO.File.ReadAllLines(filename)

            For Each line As String In theFile
                Dim values = line.Split(",")

                Dim is_header = Not String.IsNullOrEmpty(Trim(values(0)))

                If is_header Then
                    If r IsNot Nothing Then
                        w.WriteEndElement()
                    End If

                    w.WriteStartElement("P")
                    r = Trim(values(0))
                Else
                    w.WriteStartElement("R")
                End If
                w.WriteAttributeString("A01", Trim(values(0)))
                w.WriteAttributeString("A02", Trim(values(1)))
                w.WriteAttributeString("A03", Trim(values(2)))
                w.WriteAttributeString("A04", Trim(values(3)))
                w.WriteAttributeString("A05", Trim(values(4)))
                w.WriteAttributeString("A06", Trim(values(5)))
                w.WriteAttributeString("A07", Trim(values(6)))
                w.WriteAttributeString("A08", Trim(values(7)))
                w.WriteAttributeString("A09", Trim(values(8)))
                w.WriteAttributeString("A010", Trim(values(9)))
                w.WriteAttributeString("A011", Trim(values(10)))
                w.WriteAttributeString("A012", Trim(values(11)))
                w.WriteAttributeString("A013", Trim(values(12)))
                w.WriteAttributeString("A014", Trim(values(13)))
                w.WriteAttributeString("A015", Trim(values(14)))

                If Not is_header Then
                    w.WriteEndElement()
                End If
            Next

            If r IsNot Nothing Then
                w.WriteEndElement()
            End If

            w.WriteEndElement()
        End Using


    End Sub






我只需要处理双引号,请找到附件图片供您参考:

推荐答案


根据csv标准,如果用双引号括起来的字符串将被视为单个值。

As per csv standards if the string enclosed with double quotes that will be considered as single value.

没有'CSV标准'这样的东西 - 它完全取决于您使用的任何CSV导入程序实现的协议。在这种情况下,您使用的是简单的Split命令,并且不会关注引号。使用

TextFieldParser
使用类似于MS Excel中使用的标准将CSV文件处理为字段。

There is no such thing as 'CSV standard' - it depends entirely on the protocol implemented by whatever CSV importer you are using.  In this case you are using a simple Split command, and that won't pay any attention to quotes.  Use a TextFieldParser to process the CSV files into fields using the standard similar to that used in MS Excel.


这篇关于使用VB.NET处理xml转换中的双引号的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆