从XDocument输出到VB.NET中的.CSV文件

时间:2013-08-30 18:32:53

标签: vb.net linq-to-xml

我在将XDocument的输出转换为.CSV文件方面遇到了一些麻烦。我想知道是否有人可以帮助我?

首先,这是XML:

<Main>
  <Node1>
    <Node1a>1</Node1a>
    <Node1b>2</Node1b>
  </Node1>
  <Node2>
    <Node2a>Three</Node2a>
    <Node2b>Four</Node2b>
  </Node2>
</Main>

我能够将这个XML文档转换为字符串(即:下面称为sString)并将其传递给我的VB.NET函数。我现在有......

    Dim doc As XDocument = XDocument.Parse(sString)
    Dim myOutput As New StringBuilder(1000)

    For Each node As XElement In doc.Descendants("Main")
        For Each innerNode As XElement In node.Elements()
            myOutput.AppendFormat("{0},", innerNode.Attribute("Node1a").Value)
            myOutput.AppendFormat("{0},", "!")
            myOutput.AppendFormat("{0},", innerNode.Attribute("Node1b").Value)
            myOutput.AppendFormat("{0},", "!")
            myOutput.AppendFormat("{0},", innerNode.Attribute("Node2a").Value)
            myOutput.AppendFormat("{0},", "!")
            myOutput.AppendFormat("{0},", innerNode.Attribute("Node2b").Value)
        Next

        myOutput.AppendLine()
    Next

    Dim finalCSVstring as string
    finalCSVstring = myOutput.ToString()

这有点“有点”...但我想我已经搞砸了节点的内环并写出了这些值。

我想要的是最终输出:

1|2|Three|Four

哪里有“|”分离各种价值观。

1 个答案:

答案 0 :(得分:0)

您可以在叶子元素上使用String.Join,例如

Dim doc As XDocument = XDocument.Load("../../XMLFile1.xml")
Dim s As String = String.Join("|", doc.Descendants().Where(Function(d) Not (d.HasElements)).Select(Function(e) e.Value))
Console.WriteLine(s)

输出1|2|Three|Four。我使用XDocument.Load来解析输入文件中的XML,当然如果你有一个字符串使用XDocument.Parse

在您的示例中,主要错误是使用innerNode.Attribute,因为输入示例中没有属性。因此,使用innerNode.Element代替。但是没有必要编写循环。