我在将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
哪里有“|”分离各种价值观。
答案 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
代替。但是没有必要编写循环。