C# 转换Text.txt文件.xml格式

C# 转换Text.txt文件.xml格式,c#,.net,xml,C#,.net,Xml,我尝试使用以下代码将文本文件转换为xml文件。但我在第12行有错误。谁能纠正一下,给我一个正确的答案 private void button1_Click(object sender, EventArgs e) { string[] lines = File.ReadAllLines("ex3.txt"); char[] ca = new char[] { '~' }; using (XmlTextWriter writer = new XmlTextWriter("e

我尝试使用以下代码将文本文件转换为xml文件。但我在第12行有错误。谁能纠正一下,给我一个正确的答案

private void button1_Click(object sender, EventArgs e)
{

    string[] lines = File.ReadAllLines("ex3.txt");
    char[] ca = new char[] { '~' };
    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();
    }
}
private void按钮1\u单击(对象发送者,事件参数e)
{
string[]lines=File.ReadAllLines(“ex3.txt”);
char[]ca=new char[]{'~'};
使用(XmlTextWriter=newXMLTextWriter(“ex3.xml”,null))
{
writer.Formatting=格式化.缩进;
writer.WriteStartDocument();
writer.writeStarteElement(“根”);
writer.writeStarElement(“标题”);
作者。书面声明(“H1”);
writer.WriteString(第[0]行).TrimEnd().Split(ca,2)[1]);
writer.writeedelement();
编写人。书面启动要素(“H2”);
writer.WriteString(第[1]行).TrimEnd().Split(ca,2)[1]);
writer.writeedelement();
writer.writeedelement();
作者。书面声明(“细节”);
对于(int i=2;i
谢谢

这是错误

System.IndexOutOfRangeException未经处理Message=“索引超出了数组的界限。”Source=“txtxml” 堆栈跟踪: 在txtxml.Form1.button1\u单击C:\Documents and Settings\Crusaders\My Documents\Visual Studio 2005\Projects\txtxml\txtxml\Form1.cs中的(对象发送者,事件参数e):第31行 在System.Windows.Forms.Control.OnClick(EventArgs e)中 在System.Windows.Forms.Button.OnClick(EventArgs e)中 在System.Windows.Forms.Button.OnMouseUp(MouseEventArgs-mevent)上 在System.Windows.Forms.Control.WmMouseUp(Message&m、MouseButtons按钮、Int32单击) 位于System.Windows.Forms.Control.WndProc(Message&m) 位于System.Windows.Forms.ButtonBase.WndProc(Message&m) 在System.Windows.Forms.Button.WndProc(Message&m)中 在System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message&m)中 在System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message&m)中 在System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd、Int32 msg、IntPtr wparam、IntPtr lparam) 在System.Windows.Forms.UnsafentiveMethods.DispatchMessageW(MSG&MSG)中 位于System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafentiveMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID、Int32 reason、Int32 pvLoopData) 位于System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32原因,ApplicationContext上下文) 位于System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32原因,ApplicationContext上下文) 在System.Windows.Forms.Application.Run(Form mainForm)中 在C:\Documents and Settings\Crusaders\My Documents\Visual Studio 2005\Projects\txtxml\txtxml\Program.cs中的txtxml.Program.Main()处:第17行 位于System.AppDomain.nExecuteAssembly(程序集,字符串[]args) 位于System.AppDomain.ExecuteAssembly(字符串汇编文件、证据汇编安全性、字符串[]args) 在Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()上 位于System.Threading.ThreadHelper.ThreadStart\u上下文(对象状态) 在System.Threading.ExecutionContext.Run(ExecutionContext ExecutionContext,ContextCallback回调,对象状态) 在System.Threading.ThreadHelper.ThreadStart()中,代码假定文件中至少存在四行文本你确定是这样吗?

我建议您编写代码,首先声明
数组实际包含的行数与您预期的一样多。文件完全可能不存在,或者换行符是非标准的,因此
ReadAllLines()
无法识别


在这里,您再次假设该行具有特定的结构,然后使用索引运算符
[]
-访问结果中的第二个索引,这也可能是错误的潜在来源。

@LBushkin提出了代码的一个主要问题
第二个问题是,它假设每一行至少包含一个“~”(您一直在访问.split(ca,2)[1]),这在您发布的示例txt文件中似乎不是这样。 我建议替换表格中的所有代码:

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


文本文件是什么样子的?生成的XML文件应该是什么样子?在期待任何有意义的答案之前,请给出这两方面的例子。同时提供您得到的确切错误消息可能会有所帮助。错误是什么,第12行是什么?我打赌2美分,错误是
indexootfrangeexception
:-)@Kasun,提供错误消息是获得帮助的第一步。下一步是提供输入文本文件和预期输出XML文件的示例?如果您无法解释给定示例输入的函数预期输出是什么,请相信我,您将永远无法成功编写工作函数。@Kasun,拜托,这太疯狂了,人们没有魔法球,也无法猜测您的函数应该做什么。提供示例输入和示例输出。@Kasun-只有您知道应用程序的要求是什么,输入数据的格式应该是什么,或者如果不满足预期或先决条件,您可以或应该做什么。N
writer.WriteString(lines[0].TrimEnd().Split(ca, 2)[1]); 
writer.WriteString(lines[0].TrimEnd().Split(ca, 2)[1]);
string[] splitLine = lines[0].TrimEnd().Split(ca,2);
if(splitLine.Length >1)
  writer.WriteString(splitLine[1]);