文本文件转换为XML文件

时间:2010-06-19 06:14:14

标签: c# xml

我要将文本文件转换为XML。我使用以下代码。但它在第12行产生错误。任何人都可以更正代码。错误在这一行。

  

writer.WriteString(lines [0] .TrimEnd()。Split(ca,2)[1]); ------“索引超出了数组的范围。”

private void button1_Click(object sender, EventArgs e)
{
    string[] lines = File.ReadAllLines("ex3.txt");
    char[] ca = new char[] { '\n' };
    using (XmlTextWriter writer = new XmlTextWriter("ex3.xml", null))
    {
        writer.Formatting = Formatting.Indented;
        writer.WriteStartDocument();
        writer.WriteStartElement("Root");
        writer.WriteStartElement("Header");
        writer.WriteStartElement("H1");
        writer.WriteString(lines[0].TrimEnd().Split(ca, 2)[1]);
        writer.WriteEndElement();
        writer.WriteStartElement("H2");
        writer.WriteString(lines[1].TrimEnd().Split(ca, 2)[1]);
        writer.WriteEndElement();
        writer.WriteEndElement();
        writer.WriteStartElement("Details");
        for (int i = 2; i < lines.Length - 2; i++)
        {
            writer.WriteStartElement("D" + (i - 1).ToString());
            writer.WriteString(lines[i].TrimEnd().Split(ca, 2)[1]);
            writer.WriteEndElement();
        }
        writer.WriteEndElement();
        writer.WriteStartElement("Footer");
        writer.WriteStartElement("F1");
        writer.WriteString(lines[lines.Length - 2].TrimEnd().Split(ca, 2)[1]);
        writer.WriteEndElement();
        writer.WriteStartElement("F2");
        writer.WriteString(lines[lines.Length - 1].TrimEnd().Split(ca, 2)[1]);
        writer.WriteEndElement();
        writer.WriteEndElement();
        writer.WriteEndDocument();
        MessageBox.Show("Success");
    }

3 个答案:

答案 0 :(得分:1)

在阅读

的行中
writer.WriteString(lines[0].TrimEnd().Split(ca, 2)[1]);

只需删除.Split(ca,2)[1]。 所以...

writer.WriteString(lines[0].TrimEnd());

答案 1 :(得分:0)

File.ReadAllLines方法为您提供了一个数组,其中包含每个条目中的所有行。

在这里,您可以在第一行中对“\ n”进行拆分。但该行不能再包含“\ n”,因为ReadAllLines已经将文本拆分为行。

答案 2 :(得分:0)

这意味着该行中的一个数组没有您想象的那么大 - 文件ex3.txt是空的,或者(更有可能)分割单行文本的结果(在换行符上调用File.ReadAllLines()lines[0])的结果没有第二行 - 这显然是不可能的。

回应你的评论:

让我们分解造成错误的一行:

writer.WriteString(lines[0].TrimEnd().Split(ca, 2)[1]);

writer.WriteString();写作......但它写的是什么?

lines[0]是文件ex3.txt的第一行。

lines[0].TrimEnd()是文件ex3.txt的第一行,最后删除了任何空格。

lines[0].TrimEnd().Split(ca, 2)将返回一个最多包含2个元素的数组,包含文件ex3.txt的第一行,末尾有任何空格,在数组元素ca上拆分,由换行符组成。由于字符串包含一行,因此它将永远不会超过1个元素。

因此,

lines[0].TrimEnd().Split(ca, 2)[1]每次都会导致异常,因为您尝试访问永远不会有多个元素的数组的第二个元素。

如果没有您要解决的问题的更多详细信息以及输入文件的确切格式,则无法发布可解决问题的代码。