Как я могу создать один XML-файл с несколькими XML-документами внутри из текстового файла - PullRequest
0 голосов
/ 26 ноября 2018

Я начинающий программист на C #.У меня есть текстовый файл, который является моим источником, с несколькими строками данных.Я хочу создать один файл XML с несколькими документами XML внутри файла.XML-документы создаются из строк данных в текстовом файле.Я могу получить только один документ XML для создания в файле A0x.xml, который создается.Мой код читает только первую строку данных и генерирует один XML-документ вместо нескольких XML-документов.Ниже приведены 8 строк из файла M24EX.txt.Пожалуйста, помогите !!

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; }
    }
...