0

CSV ファイルを XML に書き込む際に問題があります。

CSVファイル

[Folder];;;;;
[Folder\Subfolder1];;;;;
[Folder\Subfolder1\Subfolder2];;;;;
"Descriptive stuff";"its a password";"user or something";"a URL";"if anyone has a comment"
[Folder\Subfolder1\Subfolder3];;;;;
"Descriptive stuff";"its a password";"user or something";"a URL";"if anyone has a comment"

XML 出力

    <?xml version="1.0" encoding="utf-8"?>
<PASSWORDFILE xmlns="http://www.password-depot.de/schemas/passwordfile/6.0/passwordfile.xsd">
    <PASSWORDS>
        <GROUP NAME="Folder">
            <GROUP NAME="Subfolder1">
                <GROUP NAME="Subfolder2">
                    <ITEM>
                        <DESCRIPTION>Descriptive stuff</DESCRIPTION>
                        <PASSWORD>its a password</PASSWORD>
                        <USERNAME>user or something</USERNAME>
                        <URL>a URL</URL>
                        <COMMENT>if anyone has a comment</COMMENT>
                    </ITEM>
                </GROUP>
                <GROUP NAME="Subfolder3">
                    <ITEM>
                        <DESCRIPTION>Descriptive stuff</DESCRIPTION>
                        <PASSWORD>its a password</PASSWORD>
                        <USERNAME>user or something</USERNAME>
                        <URL>a URL</URL>
                        <COMMENT>if anyone has a comment</COMMENT>
                    </ITEM>
                </GROUP>
            </GROUP>
        </GROUP>
    </PASSWORDS>
</PASSWORDFILE>

私の問題は、使用した後に GROUP タグを閉じる方法がわからないということだけです。現時点では、XML の最後にある GROUP タグを閉じて、巨大な大規模なツリーを作成しています。

4

1 に答える 1

1

まず、テキストは CSV ではありませんが、この形式に固定されている場合は、カスタム DLL を記述して XML に変換できます。CSV ファイルの詳細を理解し、XElement/XAttribute を使用して XML を作成するだけです。

次のコードを使用して DLL に変換し、XML として保存します (XML 作成コードは、以下のリンクで提供されている CSV ファイルにバインドされていることに注意してください。

http://msdn.microsoft.com/en-us/library/bb387090.aspx

これが私のカスタム DLL コードです。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Xml.Linq;

namespace CSVtoXML
{
public class Actions
 {
    public Actions()
    {

    }

    public static void convertCSVtoXML(string csvPath)
    {

        string[] source = File.ReadAllLines(csvPath);
        XElement cust = new XElement("Root",
            from str in source
            let fields = str.Split(',')
            select new XElement("Customer",
                new XAttribute("CustomerID", fields[0]),
                new XElement("CompanyName", fields[1]),
                new XElement("ContactName", fields[2]),
                new XElement("ContactTitle", fields[3]),
                new XElement("Phone", fields[4]),
                new XElement("FullAddress",
                    new XElement("Address", fields[5]),
                    new XElement("City", fields[6]),
                    new XElement("Region", fields[7]),
                    new XElement("PostalCode", fields[8]),
                    new XElement("Country", fields[9])
                )
            )
        ); 
        cust.Save("result.xml");
    }
 }
}

PowerShell でこの DLL を使用した方法は次のとおりです。

  • PS> [Reflection.Assembly]::LoadFile(“CSVtoXML.dll”)
  • PS> [CSVtoXML.Actions]::convertCSVtoXML("data.csv")

これにより、「Result.xml」が生成されます

于 2012-05-09T18:43:14.743 に答える