2 u013282852 u013282852 于 2016.04.28 09:31 提问

C# 如何将纯文本TXT转换成XML格式

想做一个小的demo 学习中遇到一点小问题 请大神指导
通过一个简单的转换 不求转换精准

2个回答

u013080045
u013080045   2016.04.28 11:11

public partial class FrmTxtXml : Form
{
String txtContent = String.Empty;
//
public FrmTxtXml()
{
InitializeComponent();
}

    //打开txt文件
    private void toolStripOpen_Click(object sender, EventArgs e)
    {
        using (OpenFileDialog fileDialog = new OpenFileDialog())
        {
            fileDialog.Filter = "文本文件(*.txt)|*.txt";
            if (fileDialog.ShowDialog() == DialogResult.OK)
            {
                String fileName = fileDialog.FileName;
                if (!String.IsNullOrEmpty(fileName))
                {
                    using (StreamReader st = new StreamReader(fileName, System.Text.Encoding.GetEncoding("GBK")))
                    {
                        txtContent = st.ReadToEnd();
                        //读取txt文件到txtTXT文本框
                        this.txtTXT.Text = txtContent;
                        st.Close();
                    }
                }
            }
        }
    }

    //将txt文件内容转换成xml格式内容
    private void toolStripConvert_Click(object sender, EventArgs e)
    {
        try
        {
            //将txt内容分解为行数组
            String[] lines = this.txtTXT.Text.Split(new string[] { "/r/n" }, StringSplitOptions.None);
            String[] heads = null;
            if (lines != null && lines.Length > 0)
            {
                //读取第一行数据,该行数据为xml文件的节点描述数据
                heads = lines[0].Split(new string[] { "/t" }, StringSplitOptions.None);
                //MessageBox.Show(heads.Length.ToString() + " " + heads[0]);
            }
            //
            StringBuilder sb = new StringBuilder();
            sb.Append("<?xml version=/"1.0/" encoding=/"gbk/"?>").Append(Environment.NewLine).Append("<dataRoot>").Append(Environment.NewLine);
            //生成xml节点
            for (int i = 1; i < lines.Length; i++)
            {
                if (lines[i] == null || lines[i].Trim().Length < 1)
                    continue;
                String[] info = lines[i].Split(new string[] { "/t" }, StringSplitOptions.None);
                sb.Append(createNode(heads, info));
            }
            sb.Append("</dataRoot>");
            this.txtXML.Text = sb.ToString();
        }
        catch (Exception exp)
        {
            MessageBox.Show(exp.Message);
        }
    }

    //产生xml节点
    private String createNode(String[] head, String[] info)
    {
        StringBuilder sb = new StringBuilder();
        sb.Append("<record>").Append(Environment.NewLine);
        for (int i = 0; i < head.Length; i++)
        {
            sb.Append("<" + head[i] + ">" + info[i] + "</" + head[i] + ">").Append(Environment.NewLine);
        }
        sb.Append("</record>").Append(Environment.NewLine);
        return sb.ToString();
    }

    //将txtXML文本框内容另存为xml文件
    private void toolStripSaveas_Click(object sender, EventArgs e)
    {
        try
        {
            String fileName = "";
            using (SaveFileDialog fileDialog = new SaveFileDialog())
            {
                fileDialog.Filter = "XML数据文件(*.xml)|*.xml";
                if (fileDialog.ShowDialog() == DialogResult.OK)
                {
                    fileName = fileDialog.FileName;
                    if (!String.IsNullOrEmpty(fileName))
                    {
                        FileStream fs = new FileStream(fileName, FileMode.Create);
                        //获得字节数组
                        byte[] data = System.Text.Encoding.GetEncoding("GBK").GetBytes(this.txtXML.Text);
                        //开始写入
                        fs.Write(data, 0, data.Length);
                        //清空缓冲区、关闭流
                        fs.Flush();
                        fs.Close();
                    }
                }
            }
            MessageBox.Show(String.Format("文件成功保存到{0}", fileName));
        }
        catch (Exception exp)
        {
            MessageBox.Show(exp.Message);
        }
    }
}
qq_38357494
qq_38357494 回复亚里士多缺德: 怎么解决的,大神?
3 个月之前 回复
u013282852
u013282852 提问 若不用第一行的数据做所有节点的描述 该如何设置每一行的节点描述
一年多之前 回复
u013282852
u013282852 已经解决 转移符搞错了 用起来很好!!!谢
一年多之前 回复
u013282852
u013282852 ("<?xml version=/"1.0/" encoding=/"gbk/"?>") 这句xml版本号 一直报错
一年多之前 回复
u013282852
u013282852 先谢谢了 我先试一下
一年多之前 回复
CSDNXIAON
CSDNXIAON   2016.04.28 09:42

C#将字符串转换成XML格式
在C#中将xml格式的字符串转换成XmlTextReader
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!

Csdn user default icon
上传中...
上传图片
插入图片