0

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

「|」さまざまな値を分離します。

4

1 に答える 1

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|FourXDocument.Loadもちろん、文字列 use がある場合は、入力ファイルから XML を解析するために使用しましXDocument.Parseた。

innerNode.Attributeサンプルでは、​​入力サンプルに属性がないため、主なエラーは usingです。したがって、innerNode.Element代わりに使用します。ただし、ループを記述する必要はありません。

于 2013-08-31T09:15:53.580 に答える