Командлет powershell в visual studio 2017, метод десериализации - PullRequest
0 голосов
/ 25 июня 2018

У меня проблема с непонятным командлетом powershell. Задача состоит в том, чтобы десериализовать XML-файл. У меня есть папка с большим количеством XML-файлов, я хотел бы прочитать в фильтре определенную информацию, используя метод десериализации. Мой начальник упомянул, что я должен использовать командлет powershell ... но я ничего об этом раньше не слышал. Так в чем же выгода? И как мне создать такой командлет.

Это мой код:

using System;
using System.IO;
using System.Xml;
using System.Xml.Serialization;
using System.Collections.Generic;
using System.Text;
using System.Management.Automation;


namespace EdocX
{
    [Cmdlet(VerbsCommon.Get, "test", SupportsShouldProcess = true)]
    public class program : Cmdlet
    {
        public static string dirPath = @"N:\EGS_SDRE\OB\19_Schnittstellen_eDocX_ITAS\06_Matching EdocX-Objektbrief\01_exemplarische_XMLs_fuer_den_Import\RWA-Anlage"
        public static List<string> dirs = new List<string>(Directory.GetFiles(dirPath, "*.xml"));        
        public static (string[], string[], string[,], string[,], string[,]) deserializeobject(string filename)
        {
            // Liste Prüfgrundlagen
            List<string> pg = new List<string>();
            pg.Add("GaVO");
            pg.Add("VkVO");
            pg.Add("VStättVO");
            pg.Add("SPrüfV");
            pg.Add("BetrVO");
            pg.Add("BbgSGPrüfV");
            pg.Add("BremAnlPrüfV");
            pg.Add("PVO");
            pg.Add("TPrüfVO");
            pg.Add("BauPrüfVO M-V");
            pg.Add("DVO-NBauO");
            pg.Add("PrüfVO NRW");
            pg.Add("HTechAnlV RP");
            pg.Add("TPrüfVO");
            pg.Add("SächsTechPrüfVO");
            pg.Add("TAnlVO");
            pg.Add("PrüfVO");
            pg.Add("ThürTechPrüfVO");

            // Auftraggeber - Var
            string[] Auftraggeber;
            string Name_AG = "";
            string Stadt_AG = "";
            string PLZ_AG = "";
            string Straße_AG = "";
            string Hausnummer_AG = "";
            string Region_AG = "";
            string PARNR_AG = "";

            // Aufstellungsort - Var
            string[] Aufstellungsort;
            string Name_AO = "";
            string Stadt_AO = "";
            string PLZ_AO = "";
            string Straße_AO = "";
            string Hausnummer_AO = "";
            string Region_AO = "";
            string Land_AO = "";

            // Anlage - Var
            string[,] Anlagen;
            string Materialnummer = "";
            string EQnummer = "";
            string Anlagentyp = "RWA-Anlage";
            string[] InterneBezeichnung;
            string[] Hersteller;

            // Vorgang rückgemeldet - Var
            string[,] Vorgang_rückgemeldet;
            string Typ_VR = "Prüfung";
            string Dienstleister = "TÜV SÜD Industrie Service GmbH";
            string Durchführungsdatum = "";
            string Maengel = "";
            string Bemerkungstexte = "";
            string Pruefgrundlage_VR = "";

            // Vorgang zukünftig - Var
            string[,] Vorgang_zukünftig;
            string Typ_VZ = "Prüfung";
            string Fälligkeit = "";
            string Pruefgrundlage_VZ = "";

            //****************************************************************************************************
            //********************************************SERIALIZATION*******************************************

            // new instance of XMLSerializer --> specifiying type
            var serializer = new XmlSerializer(typeof(Document));

            // read the XML document 
            Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
            var encoding = Encoding.GetEncoding("Windows-1252");
            using (var sr = new StreamReader(filename, encoding, true))
            using (var reader = XmlReader.Create(sr))
            {
                // restore the object's state using the deserialize method
                var i = (Document)serializer.Deserialize(reader);

                //---------------------------------------Auftraggeber-----------------------------------------------
                int count_Z1ZRMPA = i.IDOC.Z1ZRMDB.Z1ZRMPA.Count;
                for (int c = 0; c < count_Z1ZRMPA; c++)
                {
                    if (i.IDOC.Z1ZRMDB.Z1ZRMPA[c].TITLE == "Auftraggeber")
                    {
                        Name_AG = i.IDOC.Z1ZRMDB.Z1ZRMPA[c].NAME1 + i.IDOC.Z1ZRMDB.Z1ZRMPA[c].NAME2;
                        Stadt_AG = i.IDOC.Z1ZRMDB.Z1ZRMPA[c].CITY1;
                        PLZ_AG = i.IDOC.Z1ZRMDB.Z1ZRMPA[c].POST_CODE1;
                        Straße_AG = i.IDOC.Z1ZRMDB.Z1ZRMPA[c].STREET;
                        Hausnummer_AG = i.IDOC.Z1ZRMDB.Z1ZRMPA[c].HOUSE_NUM1;
                        Region_AG = i.IDOC.Z1ZRMDB.Z1ZRMPA[c].REGION;
                        PARNR_AG = i.IDOC.Z1ZRMDB.Z1ZRMPA[c].PARNR;
                    }


                    //---------------------------------------Aufstellungsort---------------------------------------- 
                    if (i.IDOC.Z1ZRMDB.Z1ZRMPA[c].TITLE == "Aufstellungsort")
                    {
                        Name_AO = i.IDOC.Z1ZRMDB.Z1ZRMPA[c].NAME1 + i.IDOC.Z1ZRMDB.Z1ZRMPA[c].NAME2;
                        Stadt_AO = i.IDOC.Z1ZRMDB.Z1ZRMPA[c].CITY1;
                        PLZ_AO = i.IDOC.Z1ZRMDB.Z1ZRMPA[c].POST_CODE1;
                        Straße_AO = i.IDOC.Z1ZRMDB.Z1ZRMPA[c].STREET;
                        Hausnummer_AO = i.IDOC.Z1ZRMDB.Z1ZRMPA[c].HOUSE_NUM1;
                        Region_AO = i.IDOC.Z1ZRMDB.Z1ZRMPA[c].REGION;
                        Land_AO = i.IDOC.Z1ZRMDB.Z1ZRMPA[c].COUNTRY;
                    }
                }

                //---------------------------------------Anlage---------------------------------------------------- 
                Materialnummer = i.IDOC.Z1ZRMDB.MABEZ;
                EQnummer = i.IDOC.Z1ZRMDB.OBJNR;
                int count_ANLAGEPRFTXT = i.IDOC.Z1ZRMDB.PRFBER.PRFERG.ANLAGE.PRFTXT.Count;
                int AnzahlAnlagen = count_ANLAGEPRFTXT - 1;
                InterneBezeichnung = new string[AnzahlAnlagen];
                Hersteller = new string[AnzahlAnlagen];

                for (int c = 1; c < count_ANLAGEPRFTXT; c++)
                {
                    InterneBezeichnung[c - 1] = i.IDOC.Z1ZRMDB.PRFBER.PRFERG.ANLAGE.PRFTXT[c].ENTRBEREICH;
                    Hersteller[c - 1] = i.IDOC.Z1ZRMDB.PRFBER.PRFERG.ANLAGE.PRFTXT[c].HERSTELLER;
                }
                //---------------------------------------Vorgang rückgemeldet-------------------------------------  
                Durchführungsdatum = i.IDOC.Z1ZRMDB.PRFBER.DATEN.Pruefungszeitraum;
                int count_PRFTXT = i.IDOC.Z1ZRMDB.PRFBER.PRFERG.PRFTXT.Count;
                for (int c = 0; c < count_PRFTXT; c++)
                {
                    if (i.IDOC.Z1ZRMDB.PRFBER.PRFERG.PRFTXT[c].KATEGORIE == "Grundlage")
                    {
                        string Pruefgrundlage = i.IDOC.Z1ZRMDB.PRFBER.PRFERG.PRFTXT[c].Value;
                        int count_pg = pg.Count;
                        for (int cc = 0; cc < count_pg; cc++)
                        {
                            if (Pruefgrundlage.Contains(pg[cc]) == true)
                            {
                                Pruefgrundlage_VR = pg[cc];
                            }
                        }
                    }

                    if (i.IDOC.Z1ZRMDB.PRFBER.PRFERG.PRFTXT[c].ROWTYPE == "Zwischenüberschrift" && i.IDOC.Z1ZRMDB.PRFBER.PRFERG.PRFTXT[c].PATTERN == "@KATEGORIE[../@KATEGORIE='Mangel' and ../@GEWICHT[not(contains(.,'Beseitigt'))]]")
                    {
                        string Maengelabruf = i.IDOC.Z1ZRMDB.PRFBER.PRFERG.PRFTXT[c].Value;
                        if (Maengelabruf == "Mängel")
                        {
                            Maengel = "Mängel_ja";
                        }
                        else
                        {
                            Maengel = "Mängel_nein";
                        }
                    }

                    if (i.IDOC.Z1ZRMDB.PRFBER.PRFERG.PRFTXT[c].ROWTYPE == "Mangel" && i.IDOC.Z1ZRMDB.PRFBER.PRFERG.PRFTXT[c].PATTERN == "@KATEGORIE[../@KATEGORIE='Mangel' and ../@GEWICHT[not(contains(.,'Beseitigt'))]]")
                    {
                        string Bemerkungstext = i.IDOC.Z1ZRMDB.PRFBER.PRFERG.PRFTXT[c].Value;
                        Bemerkungstexte += " " + Bemerkungstext;
                    }
                }

                //---------------------------------------Vorgang zukünftig--------------------------------------  

                int count_Z1ZRMAU = i.IDOC.Z1ZRMDB.Z1ZRMAU.Count;
                for (int c = 0; c < count_Z1ZRMAU; c++)
                {
                    if (i.IDOC.Z1ZRMDB.Z1ZRMAU[c].MNAME == "Nächste Wiederkehrende Prüfung")
                    {
                        Fälligkeit = i.IDOC.Z1ZRMDB.Z1ZRMAU[c].MWERT;
                    }
                }
                for (int c = 0; c < count_PRFTXT; c++)
                {
                    if (i.IDOC.Z1ZRMDB.PRFBER.PRFERG.PRFTXT[c].KATEGORIE == "Grundlage")
                    {
                        string Pruefgrundlage = i.IDOC.Z1ZRMDB.PRFBER.PRFERG.PRFTXT[c].Value;
                        int count_pg = pg.Count;
                        for (int cc = 0; cc < count_pg; cc++)
                        {
                            if (Pruefgrundlage.Contains(pg[cc]) == true)
                            {
                                Pruefgrundlage_VZ = pg[cc];
                            }
                        }
                    }
                }

                Auftraggeber = new string[7];
                Aufstellungsort = new string[7];
                Anlagen = new string[AnzahlAnlagen, 5];
                Vorgang_rückgemeldet = new string[AnzahlAnlagen, 6];
                Vorgang_zukünftig = new string[AnzahlAnlagen, 3];
            }

            Auftraggeber[0] = Name_AG;
            Auftraggeber[1] = Stadt_AG;
            Auftraggeber[2] = PLZ_AG;
            Auftraggeber[3] = Straße_AG;
            Auftraggeber[4] = Hausnummer_AG;
            Auftraggeber[5] = Region_AG;
            Auftraggeber[6] = PARNR_AG;

            Aufstellungsort[0] = Name_AO;
            Aufstellungsort[1] = Stadt_AO;
            Aufstellungsort[2] = PLZ_AO;
            Aufstellungsort[3] = Straße_AO;
            Aufstellungsort[4] = Hausnummer_AO;
            Aufstellungsort[5] = Region_AO;
            Aufstellungsort[6] = Land_AO;

            for (int j = 0; j < Anlagen.GetLength(0); j++)
            {
                Anlagen[j, 0] = Materialnummer;
                Anlagen[j, 1] = EQnummer;
                Anlagen[j, 2] = Anlagentyp;
                Anlagen[j, 3] = InterneBezeichnung[j];
                Anlagen[j, 4] = Hersteller[j];

                Vorgang_rückgemeldet[j, 0] = Typ_VR;
                Vorgang_rückgemeldet[j, 1] = Dienstleister;
                Vorgang_rückgemeldet[j, 2] = Durchführungsdatum;
                Vorgang_rückgemeldet[j, 3] = Maengel;
                Vorgang_rückgemeldet[j, 4] = Bemerkungstexte;
                Vorgang_rückgemeldet[j, 5] = Pruefgrundlage_VR;

                Vorgang_zukünftig[j, 0] = Typ_VZ;
                Vorgang_zukünftig[j, 1] = Fälligkeit;
                Vorgang_zukünftig[j, 2] = Pruefgrundlage_VZ;
            }

            return (Auftraggeber, Aufstellungsort, Anlagen, Vorgang_rückgemeldet, Vorgang_zukünftig);
        }
    }
}

А вот класс для имитации структуры xml:

using System;
using System.Xml;
using System.Xml.Serialization;
using System.Collections.Generic;

namespace EdocX
{//ZRM01 Root Environment
    [Serializable()]
    [XmlRoot(ElementName = "ZRM01")]
    public partial class Document
    {
        [XmlElement()]
        public ZRM01IDOC IDOC { get; set; }
    }

    //IDOC
    [Serializable()]
    public partial class ZRM01IDOC
    {
        [XmlElement()]
        public ZRM01IDOCZ1ZRMDB Z1ZRMDB { get; set; }
    }

    //IDOC Elements
    [Serializable()]
    public partial class ZRM01IDOCZ1ZRMDB
    {
        public string MABEZ { get; set; } // Materialnummer
        public string OBJNR { get; set; } // Equipmentnummer

        [XmlElement("Z1ZRMPA")]
        public List<ZRM01IDOCZ1ZRMDBZ1ZRMPA> Z1ZRMPA = new List<ZRM01IDOCZ1ZRMDBZ1ZRMPA>(); //{ get; set; }

        [XmlElement("Z1ZRMAU")]
        public List<ZRM01IDOCZ1ZRMDBZ1ZRMAU> Z1ZRMAU = new List<ZRM01IDOCZ1ZRMDBZ1ZRMAU>();

        [XmlElement()]
        public ZRM01IDOCZ1ZRMDBPRFBER PRFBER { get; set; }
    }

    //Z1ZRMPA --> Mandant / Gebäude
    [Serializable()]
    public partial class ZRM01IDOCZ1ZRMDBZ1ZRMPA
    {
        [XmlAttribute()]
        public string TITLE { get; set; } // "Auftraggeber" "Aufstellungsort"

        [XmlElement()]
        public string PARNR { get; set; } // Parnr. (Mandant)

        [XmlElement()]
        public string NAME1 { get; set; } // Name

        [XmlElement()]
        public string NAME2 { get; set; } // Name

        [XmlElement()]
        public string CITY1 { get; set; } // Stadt

        [XmlElement()]
        public string POST_CODE1 { get; set; } // PLZ

        [XmlElement()]
        public string STREET { get; set; } // Straße

        [XmlElement()]
        public string HOUSE_NUM1 { get; set; } // Hausnummer

        [XmlElement()]
        public string REGION { get; set; } // Region

        [XmlElement()]
        public string COUNTRY { get; set; } // Land

    }

    //Z1ZRMAU
    [Serializable()]
    public partial class ZRM01IDOCZ1ZRMDBZ1ZRMAU
    {
        [XmlElement()]
        public string MNAME { get; set; } // "Nächste Wiederkehrende Prüfung"

        [XmlElement()]
        public string MWERT { get; set; } // Fälligkeit
    }

    //PRFBER Elemts
    [Serializable()]
    public partial class ZRM01IDOCZ1ZRMDBPRFBER
    {
        [XmlElement()]
        public ZRM01IDOCZ1ZRMDBPRFBERPRFERG PRFERG { get; set; }

        [XmlElement()]
        public ZRM01IDOCZ1ZRMDBPRFBERDATEN DATEN { get; set; }
    }

    //DATEN
    [Serializable()]
    public partial class ZRM01IDOCZ1ZRMDBPRFBERDATEN
    {
        [XmlElement()]
        public string Pruefungszeitraum { get; set; } //Durchführungsdatum
    }

    //PRFERG Elements
    [Serializable()]
    public partial class ZRM01IDOCZ1ZRMDBPRFBERPRFERG
    {
        [XmlElement()]
        public ZRM01IDOCZ1ZRMDBPRFBERPRFERGANLAGE ANLAGE { get; set; }

        [XmlElement("PRFTXT")]
        public List<ZRM01IDOCZ1ZRMDBPRFBERPRFERGPRFTXT> PRFTXT = new List<ZRM01IDOCZ1ZRMDBPRFBERPRFERGPRFTXT>();
    }

    //ANLAGE
    [Serializable()]
    public partial class ZRM01IDOCZ1ZRMDBPRFBERPRFERGANLAGE
    {
        [XmlElement("PRFTXT")]
        public List<ZRM01IDOCZ1ZRMDBPRFBERPRFERGANLAGEPRFTXT> PRFTXT = new List<ZRM01IDOCZ1ZRMDBPRFBERPRFERGANLAGEPRFTXT>();
    }

    //PRFTXT
    [Serializable()]
    public partial class ZRM01IDOCZ1ZRMDBPRFBERPRFERGANLAGEPRFTXT
    {
        [XmlAttribute()]
        public string REF { get; set; } // Anzahl Anlagen

        [XmlAttribute()]
        public string HERSTELLER { get; set; } // Hersteller Anlage

        [XmlAttribute()]
        public string ENTRBEREICH { get; set; } // Interne Bezeichnung Anlage
    }

    //PRFTXT
    [Serializable()]
    public partial class ZRM01IDOCZ1ZRMDBPRFBERPRFERGPRFTXT
    {
        [XmlAttribute()]
        public string KATEGORIE { get; set; } // A"Grundlage" < ... >

        [XmlText()]
        public string Value { get; set; }

        [XmlAttribute()]
        public string ROWTYPE { get; set; } // "Zwischenüberschrift" (für Mangel ja/nein) "Mangel" (für Bemerkungstext)

        [XmlAttribute()]
        public string PATTERN { get; set; } // "@KATEGORIE[../@KATEGORIE='Mangel' and ../@GEWICHT[not(contains(.,'Beseitigt'))]]" < Mängel > bzw < ... >

    }
}

Я очень благодарен за помощь!

...