如何从文本文件创建一个具有多个XML重复项的xml文件

时间:2018-11-25 22:44:34

标签: c# xml build document

我是C#入门程序员。我有一个文本文件,这是我的源文件,其中包含多行数据。我想创建一个XML文件,其中包含多个XML文档。 xml文档是从文本文件中的数据行生成的。我只能在创建的A0x.xml文件中生成一个xml文档。我的代码仅读取第一行数据,并生成一个xml文档,而不是多个xml文档。下面是M24EX.txt文件中的8行。请帮忙!

A0ASMSS3110004624190  EA00008FB239980940001RAIR   A30 0120505                                                                            18094133644FT
A0ASMSS5340011122822  HD00001FB239981000001RAIR   A6C 0120503                                                                            18100124741FT
A0ASMSS5365002870093  EA00003FB239981000002RAIR   A6C 0120503                                                                            18100125431FT
A0ASMS 5365001671717  EA00005FB239981010001REY2550A6C 0120503133                                                                         18101075536SF
A0ASMS 5365001671717  EA00011FB239981010002RGE    A6C 0120505129                                                                         18101105015FT
A0AFLZ 6625013922071  EA00001FB239981070001RGRN   D6C 0120505110                                                                         18107150014FT
A0AFLZ 6650013204283  EA00003FB239981070002NGRN   D6C 0120504777                                                                         18107151015FT
A0ASMSS1650009937278  EA00006FB239981080001RAIR   A6C 0120505                                                                            18108082906FT

和代码:

Public class Program
{
    public static void Main(string[] arg)
    {
        XDocument A0x = new XDocument();

        var IdCode = "511";
        var CtrlNbr = "0001";
        var PurposeCode = "00";
        var TypeCode = "A0";
        var EntyIdCode = "OB";
        var IdCodeQlfr = "10";
        var EntyIdCode1 = "FR";
        var DocNbr = "TN";
        var AssignNbr = "1";
        var NSN = "FS";
        var DD = "74";
        var AgncyQlfrCode = "DF";
        var LstQlfrCode = "0";
        DateTime saveUtcNow = DateTime.UtcNow;
        DateTime saveNow = DateTime.Now;

        var field = new ParseTextFile().Parse();

        var tagBuilder = new TagBuilder();
        var parent = tagBuilder.BuildParent("File");
        var subParent = tagBuilder.BuildParent("T_Requisition_511");
        var ParentST = tagBuilder.BuildParent("S_Transaction_Set_Header");
        var ST01 = tagBuilder.BuildChild("E_Transaction_Set_Identifier_Code", IdCode);
        var ST02 = tagBuilder.BuildChild("E_Transaction_Set_Control_Number", CtrlNbr);
        var ParentBR = tagBuilder.BuildParent("S_Beginning_Segment_for_Material_Management");
        var BR01 = tagBuilder.BuildChild("E_Transaction_Set_Purpose_Code", PurposeCode);
        var BR02 = tagBuilder.BuildChild("E_Transaction_Type_Code", TypeCode);
        var BR03 = tagBuilder.BuildChild("E_Date", saveUtcNow.ToString("yyyyMMdd"));
        var BR09 = tagBuilder.BuildChild("E_Time", saveUtcNow.ToString("hhmmss"));
        var ParentN1 = tagBuilder.BuildParent("L_Name");
        var ParentS = tagBuilder.BuildParent("S_Name");
        var N101 = tagBuilder.BuildChild("E_Entity_Identifier_Code", EntyIdCode);
        var N103 = tagBuilder.BuildChild("E_Identification_Code_Qualifier", IdCodeQlfr);
        var N104 = tagBuilder.BuildChild("E_Identification_Code", field.SRAN);
        var N106 = tagBuilder.BuildChild("E_Entity_Identifier_Code_1", EntyIdCode1);
        var ParentLX = tagBuilder.BuildParent("L_Assigned_Number");
        var ParentAN = tagBuilder.BuildParent("S_Assigned_Number");
        var LX01 = tagBuilder.BuildChild("E_Assigned_Number", AssignNbr);
        var ParentN9 = tagBuilder.BuildParent("S_Reference_Identification");
        var N901 = tagBuilder.BuildChild("E_Reference_Identification_Qualifier", DocNbr);
        var N902 = tagBuilder.BuildChild("E_Reference_Identification", field.DocumentNumber);
        var ParentPO1 = tagBuilder.BuildParent("S_Baseline_Item_Data");
        var PO102 = tagBuilder.BuildChild("E_Quantity_Ordered", Convert.ToString(field.Quantity));
        var PO103 = tagBuilder.BuildChild("E_Unit_or_Basis_for_Measurement_Code", field.UnitofIssue);
        var PO106 = tagBuilder.BuildChild("E_Product_Service_ID_Qualifier", NSN);
        var PO107 = tagBuilder.BuildChild("E_Product_Service_ID", field.StockNumber);
        var ParentSE = tagBuilder.BuildParent("S_Transaction_Set_Trailer");
        var SE01 = tagBuilder.BuildChild("E_Number_of_Included_Segments", new CountSegmentTags().CountSgmts().ToString());
        var SE02 = tagBuilder.BuildChild("E_Transaction_Set_Control_Number", CtrlNbr);

        parent.Add(subParent);
        subParent.Add(ParentST);
        ParentST.Add(ST01);
        ParentST.Add(ST02);
        subParent.Add(ParentBR);
        ParentBR.Add(BR01);
        ParentBR.Add(BR02);
        ParentBR.Add(BR03);
        ParentBR.Add(BR09);
        subParent.Add(ParentN1);
        ParentN1.Add(ParentS);
        ParentS.Add(N101);
        ParentS.Add(N103);
        ParentS.Add(N104);
        ParentS.Add(N106);
        subParent.Add(ParentLX);
        ParentLX.Add(ParentAN);
        ParentAN.Add(LX01);
        ParentLX.Add(ParentN9);
        ParentN9.Add(N901);
        ParentN9.Add(N902);
        ParentLX.Add(ParentPO1);
        ParentPO1.Add(PO102);
        ParentPO1.Add(PO103);
        ParentPO1.Add(PO106);
        ParentPO1.Add(PO107);
        ParentSE.Add(SE01);
        ParentSE.Add(SE02);
        A0x.Add(parent);

        A0x.Declaration = new XDeclaration("1.0", "utf-8", "true");
        A0x.Save("M24EX.xml");

    }

    public class TagBuilder
    {

        public XElement BuildParent(string name)
        {
            return new XElement(name);
        }

        public XElement BuildChild(string name, string value)
        {
            var tag = new XElement(name);
            tag.Add(value);

            return tag;
        }
    }

    public void Read()
    {
        int counter = 0;
        string line;

        StreamReader file = new StreamReader("M24EX.txt");

        while ((line = file.ReadLine()) != null)

            if (line.StartsWith("A0")) // only pull "A0x" records
            {
                counter++;
                Console.WriteLine("{0}:{1}", counter, line);
            }

        file.Close();
    }

    public class ParseTextFile
    {
        public TransactionFields Parse()
        {

            StreamReader file = new StreamReader("M24Ex.txt");

            string line;

            int counter = 0;

            var field = new TransactionFields(); 

            while ((line = file.ReadLine()) != null)

                if (line.StartsWith("A0"))
                {
                    //Assigns field to the Transaction field names

                    field.DocumentIdentifier = line.Substring(0, 3).Trim(); // Tric
                    field.RoutingIdentifier = line.Substring(4, 3).Trim(); 
                    field.MediaStatusCode = line.Substring(7, 1).Trim(); 
                    field.StockNumber = line.Substring(7, 15).Trim();
                    field.UnitofIssue = line.Substring(22, 2).Trim();
                    field.Quantity = Convert.ToInt32(line.Substring(24, 5));
                    field.DocumentNumber = line.Substring(29, 14).Trim();
                    field.SRAN = line.Substring(29, 6).Trim();
                    field.DemandCode = line.Substring(44, 1).Trim();
                    field.SupplementaryAddress = line.Substring(45, 6).Trim();
                    field.SignalCode = line.Substring(51, 1).Trim();
                    field.FundCode = line.Substring(52, 2).Trim();
                    field.DistributionCode = line.Substring(54, 3).Trim();
                    field.ProjectCode = line.Substring(57, 3).Trim();
                    field.Priority = line.Substring(60, 2).Trim();
                    field.ReqDeliveryDate = line.Substring(62, 3).Trim();
                    field.AdviceCode = line.Substring(65, 2).Trim();
                    field.DateReceiptofReq = line.Substring(67, 3).Trim();
                    field.PurposeCode = line.Substring(70, 1).Trim();
                    field.ConditionCode = line.Substring(71, 1).Trim();
                    field.MgmtCode = line.Substring(72, 1).Trim();
                }
                file.Close();
                return field;
        }
    }

    public class ConvertXmlToText
    {
        public void ConvertXmlDoc()
        {
            string onlyContent = string.Empty;

            XmlDocument xdoc = new XmlDocument();
            xdoc.Load("A0x.xml");

            var file = xdoc.SelectNodes("File/T_Requisition_511");
            for (int i = 0; i < file.Count; i++)
            {
                onlyContent += string.Format("\n", i);

                foreach (XmlNode node in file[i].ChildNodes)
                    onlyContent += string.Format("{0},", node.InnerText);
            }

            File.WriteAllText("A0x.txt", onlyContent);
        }
    }

public class TransactionFields
    {

    public string DocumentIdentifier { get; set; }

    public string RoutingIdentifier { get; set; }

    public string MediaStatusCode { get; set; }

    public string StockNumber { get; set; }

    public string UnitofIssue { get; set; }

    public int Quantity { get; set; }

    public string DocumentNumber { get; set; }

    public string SRAN { get; set; }

    public string DemandCode { get; set; }

    public string SupplementaryAddress { get; set; }

    public string SignalCode { get; set; }

    public string FundCode { get; set; }

    public string DistributionCode { get; set; }

    public string ProjectCode { get; set; }

    public string Priority { get; set; }

    public double UnitPrice { get; set; }

    public string Date { get; set; }

    public string Time { get; set; }
    }

0 个答案:

没有答案