Autor Beitrag
Schoppenhonne
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19



BeitragVerfasst: Fr 12.03.21 21:03 
Hallo liebe Community,

letztens wollte ich noch eine absolut verschachtelte XML-Datei auslesen und Dank Eurer Hilfe ist es nir dann auch gelungen.


Heute möchte ich eine ebenso verschachtelte XML-Datei erstellen.

Ich bin schon ziemlich weit, aber nun komme ich nicht weiter.

Die Datei soll nachher so aussehen:

ausblenden volle Höhe XML-Daten
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
<?xml version="1.0" encoding="utf-8"?>
<!--Manually changes to this file could result in unexpected errors after re-import.-->
<ReportCollection>
  <Report FavoriteDocumentType="Report">
    <Header>
      <VersionIntern>1</VersionIntern>
      <Version>1</Version>
      <Id>{2bd2b4e1-ef53-49a4-b81e-f428d9fb6ffa}</Id>
      <Name>DirksXMLerste</Name>
      <Description>Report</Description>
      <Created>2021-03-10 07:00</Created>
      <CreatedBy>ich</CreatedBy>
      <Modified>2021-03-10 07:05</Modified>
      <ModifiedBy>ich</ModifiedBy>
      <LockedBy>ich</LockedBy>
    </Header>
    <ReportSettings>
      <ReadOnly>False</ReadOnly>
      <AutoStart>False</AutoStart>
      <Ranking>-1</Ranking>
      <LogoPath>
      </LogoPath>
      <TableVersion>1</TableVersion>
      <ChartVersion>1</ChartVersion>
      <MapVersion>1</MapVersion>
      <DashboardVersion>1</DashboardVersion>
      <DashboardTileVersion>1</DashboardTileVersion>
      <MobileVersion>1</MobileVersion>
      <MISStateInfo LanguageID="7" BrandTerm="-1"  />
    </ReportSettings>
    <Items>
      <TableFavoriteData TableID="1091" TableGuid="401622513" DataOrigin="TableMenue" HideThemePath="True">
        <Id>99742cfe-4bd8-4178-a99f-89bdef78616a</Id>
        <PackageLogSign IdMB="40" IdWB="16" Name="Brands" Type="Tabelle" />
        <MISStateInfo IDEbene="11" SourceLevel="-1" SourceArea="" />
        <TableSubChoiceData>
          <IdentifikatorStorageItem Gr_Value_Comp="10" Gr_Notion1="1">
            <NodeStorageItem ID="-1" GroupID="100" DimTyp="12" />
          </IdentifikatorStorageItem>
        </TableSubChoiceData>
        <TableSubChoiceData>
          <IdentifikatorStorageItem Gr_Value_Comp="10" ID_Value_Comp="3">
            <NodeStorageItem ID="3" GroupID="100" DimTyp="11" />
          </IdentifikatorStorageItem>
        </TableSubChoiceData>
        <TableSubChoiceData>
          <IdentifikatorStorageItem>
            <NodeStorageItem ID="3081" GroupID="1168" DimTyp="3" />
          </IdentifikatorStorageItem>
        </TableSubChoiceData>
        <TableSubChoiceData>
          <IdentifikatorStorageItem Gr_Notion2="0">
            <NodeStorageItem ID="-1" GroupID="1167" DimTyp="4" />
          </IdentifikatorStorageItem>
        </TableSubChoiceData>
        <TableSubChoiceData>
          <IdentifikatorStorageItem>
            <NodeStorageItem ID="-1" GroupID="4206" DimTyp="4" />
          </IdentifikatorStorageItem>
        </TableSubChoiceData>
      </TableFavoriteData>
      <TableFavoriteData TableID="1091" TableGuid="401622513" DataOrigin="TableMenue" HideThemePath="True">
        <Id>99742cfe-4bd8-4178-a99f-89bdef78616a</Id>
        <PackageLogSign IdMB="40" IdWB="16" Name="Brands" Type="Tabelle" />
        <MISStateInfo IDEbene="11" SourceLevel="-1" SourceArea="" />
        <TableSubChoiceData>
          <IdentifikatorStorageItem Gr_Value_Comp="10" Gr_Notion1="1">
            <NodeStorageItem ID="-1" GroupID="100" DimTyp="12" />
          </IdentifikatorStorageItem>
        </TableSubChoiceData>
        <TableSubChoiceData>
          <IdentifikatorStorageItem Gr_Value_Comp="10" ID_Value_Comp="3">
            <NodeStorageItem ID="3" GroupID="100" DimTyp="11" />
          </IdentifikatorStorageItem>
        </TableSubChoiceData>
        <TableSubChoiceData>
          <IdentifikatorStorageItem>
            <NodeStorageItem ID="3081" GroupID="1168" DimTyp="3" />
          </IdentifikatorStorageItem>
        </TableSubChoiceData>
        <TableSubChoiceData>
          <IdentifikatorStorageItem Gr_Notion2="0">
            <NodeStorageItem ID="-1" GroupID="1167" DimTyp="4" />
          </IdentifikatorStorageItem>
        </TableSubChoiceData>
        <TableSubChoiceData>
          <IdentifikatorStorageItem>
            <NodeStorageItem ID="-1" GroupID="4206" DimTyp="4" />
          </IdentifikatorStorageItem>
        </TableSubChoiceData>
      </TableFavoriteData>
      <TableFavoriteData TableID="1091" TableGuid="401622513" DataOrigin="TableMenue" HideThemePath="True">
        <Id>99742cfe-4bd8-4178-a99f-89bdef78616a</Id>
        <PackageLogSign IdMB="40" IdWB="16" Name="Brands" Type="Tabelle" />
        <MISStateInfo IDEbene="11" SourceLevel="-1" SourceArea="" />
        <TableSubChoiceData>
          <IdentifikatorStorageItem Gr_Value_Comp="10" Gr_Notion1="1">
            <NodeStorageItem ID="-1" GroupID="100" DimTyp="12" />
          </IdentifikatorStorageItem>
        </TableSubChoiceData>
        <TableSubChoiceData>
          <IdentifikatorStorageItem Gr_Value_Comp="10" ID_Value_Comp="3">
            <NodeStorageItem ID="3" GroupID="100" DimTyp="11" />
          </IdentifikatorStorageItem>
        </TableSubChoiceData>
        <TableSubChoiceData>
          <IdentifikatorStorageItem>
            <NodeStorageItem ID="3081" GroupID="1168" DimTyp="3" />
          </IdentifikatorStorageItem>
        </TableSubChoiceData>
        <TableSubChoiceData>
          <IdentifikatorStorageItem Gr_Notion2="0">
            <NodeStorageItem ID="-1" GroupID="1167" DimTyp="4" />
          </IdentifikatorStorageItem>
        </TableSubChoiceData>
        <TableSubChoiceData>
          <IdentifikatorStorageItem>
            <NodeStorageItem ID="-1" GroupID="4206" DimTyp="4" />
          </IdentifikatorStorageItem>
        </TableSubChoiceData>
      </TableFavoriteData>
    </Items>
    <ReportIdentifierEncrypted Id="reportIdent" Signature="Meine Signatur">ganz viel wirrer Text</ReportIdentifierEncrypted>
  </Report>
</ReportCollection>



Hier ist meine Klasse ReportCollection:
ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
235:
236:
237:
238:
239:
240:
241:
242:
243:
244:
245:
246:
247:
248:
249:
250:
251:
252:
253:
254:
255:
256:
257:
258:
259:
260:
261:
262:
263:
264:
265:
266:
267:
268:
269:
270:
271:
272:
273:
274:
275:
276:
277:
278:
279:
280:
281:
282:
283:
284:
285:
286:
287:
288:
289:
290:
291:
292:
293:
294:
295:
296:
297:
298:
299:
300:
301:
302:
303:
304:
305:
306:
307:
308:
309:
310:
311:
312:
313:
314:
315:
316:
317:
318:
319:
320:
321:
322:
323:
324:
325:
326:
327:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Serialization;

namespace DeSerializer
{

    [XmlRoot(ElementName="Header")]
  public class Header {

    [XmlElement(ElementName="VersionIntern")]
    public int VersionIntern { get; set; }

    [XmlElement(ElementName="Version")]
    public int Version { get; set; }

    [XmlElement(ElementName="Id")]
    public string Id { get; set; }

    [XmlElement(ElementName="Name")]
    public string Name { get; set; }

    [XmlElement(ElementName="Description")]
    public string Description { get; set; }

    [XmlElement(ElementName="Generator")]
    public string Generator { get; set; }

    [XmlElement(ElementName="Created")]
    public string Created { get; set; }

    [XmlElement(ElementName="CreatedBy")]
    public string CreatedBy { get; set; }

    [XmlElement(ElementName="CreatedByComp")]
    public string CreatedByComp { get; set; }

    [XmlElement(ElementName="Modified")]
    public string Modified { get; set; }

    [XmlElement(ElementName="ModifiedBy")]
    public string ModifiedBy { get; set; }

    [XmlElement(ElementName="ModifiedByComp")]
    public string ModifiedByComp { get; set; }

    [XmlElement(ElementName="LockedBy")]
    public string LockedBy { get; set; }
  }



  [XmlRoot(ElementName="MISStateInfo")]
  public class MISStateInfo {

    [XmlAttribute(AttributeName="IDEbene")]
    public int IDEbene { get; set; }

    [XmlAttribute(AttributeName="IDMarktbereich")]
    public int IDMarktbereich { get; set; }

    [XmlAttribute(AttributeName="IDSubEbene")]
    public int IDSubEbene { get; set; }

    [XmlAttribute(AttributeName="LanguageID")]
    public int LanguageID { get; set; }

    [XmlAttribute(AttributeName="StatusSubEbene")]
    public string StatusSubEbene { get; set; }

    [XmlAttribute(AttributeName="IdGebiete")]
    public int IdGebiete { get; set; }

    [XmlAttribute(AttributeName="ActiveClientStateAreaId")]
    public int ActiveClientStateAreaId { get; set; }

    [XmlAttribute(AttributeName="BrandTerm")]
    public int BrandTerm { get; set; }

    [XmlAttribute(AttributeName="BrandTermGrp")]
    public int BrandTermGrp { get; set; }

    [XmlAttribute(AttributeName="BrandStatus")]
    public int BrandStatus { get; set; }

    [XmlAttribute(AttributeName="BrandStatusGrp")]
    public int BrandStatusGrp { get; set; }

    [XmlAttribute(AttributeName="StatusLocation")]
    public int StatusLocation { get; set; }

    [XmlAttribute(AttributeName="SourceLevel")]
    public int SourceLevel { get; set; }

    [XmlAttribute(AttributeName="SourceArea")]
    public int SourceArea { get; set; }
  }



  [XmlRoot(ElementName="ReportSettings")]
  public class ReportSettings {

    [XmlElement(ElementName="ReadOnly")]
    public string ReadOnly { get; set; }

    [XmlElement(ElementName="AutoStart")]
    public string AutoStart { get; set; }

    [XmlElement(ElementName="Ranking")]
    public int Ranking { get; set; }

    [XmlElement(ElementName="DatabaseSignature")]
    public string DatabaseSignature { get; set; }

    [XmlElement(ElementName="LogoPath")]
    public string LogoPath { get; set; }

    [XmlElement(ElementName="TableVersion")]
    public int TableVersion { get; set; }

    [XmlElement(ElementName="ChartVersion")]
    public int ChartVersion { get; set; }

    [XmlElement(ElementName="MapVersion")]
    public int MapVersion { get; set; }

    [XmlElement(ElementName="DashboardVersion")]
    public int DashboardVersion { get; set; }

    [XmlElement(ElementName="DashboardTileVersion")]
    public int DashboardTileVersion { get; set; }

    [XmlElement(ElementName="MobileVersion")]
    public int MobileVersion { get; set; }

    [XmlElement(ElementName="MISStateInfo")]
    public MISStateInfo MISStateInfo { get; set; }
  }



  [XmlRoot(ElementName="PackageLogSign")]
  public class PackageLogSign {

    [XmlAttribute(AttributeName="IdMB")]
    public int IdMB { get; set; }

    [XmlAttribute(AttributeName="IdWB")]
    public int IdWB { get; set; }

    [XmlAttribute(AttributeName="Name")]
    public string Name { get; set; }

    [XmlAttribute(AttributeName="Type")]
    public string Type { get; set; }
  }



  [XmlRoot(ElementName="NodeStorageItem")]
  public class NodeStorageItem {

    [XmlAttribute(AttributeName="ID")]
    public int ID { get; set; }

    [XmlAttribute(AttributeName="GroupID")]
    public int GroupID { get; set; }

    [XmlAttribute(AttributeName="DimTyp")]
    public int DimTyp { get; set; }
  }



  [XmlRoot(ElementName="IdentifikatorStorageItem")]
  public class IdentifikatorStorageItem {

    [XmlElement(ElementName="NodeStorageItem")]
    public NodeStorageItem NodeStorageItem { get; set; }

    [XmlAttribute(AttributeName="Gr_Value_Comp")]
    public int Gr_Value_Comp { get; set; }

    [XmlAttribute(AttributeName="Gr_Notion1")]
    public int Gr_Notion1 { get; set; }

    [XmlAttribute(AttributeName="ID_Value_Comp")]
    public int ID_Value_Comp { get; set; }

    [XmlAttribute(AttributeName="Gr_Notion2")]
    public int Gr_Notion2 { get; set; }
  }



  [XmlRoot(ElementName="TableSubChoiceData")]
  public class TableSubChoiceData {

    [XmlElement(ElementName="IdentifikatorStorageItem")]
    public IdentifikatorStorageItem IdentifikatorStorageItem { get; set; }

    [XmlElement(ElementName="IdentCollectionItem")]
    public IdentCollectionItem IdentCollectionItem { get; set; }
  }



  [XmlRoot(ElementName="TableFavoriteData")]
  public class TableFavoriteData {

    [XmlElement(ElementName="Id")]
    public int Id { get; set; }

    [XmlElement(ElementName="PackageLogSign")]
    public PackageLogSign PackageLogSign { get; set; }

    [XmlElement(ElementName="MISStateInfo")]
    public MISStateInfo MISStateInfo { get; set; }

    [XmlElement(ElementName="TableSubChoiceData")]
    public List<TableSubChoiceData> TableSubChoiceData { get; set; }

    [XmlAttribute(AttributeName="TableID")]
    public int TableID { get; set; }

    [XmlAttribute(AttributeName="TableGuid")]
    public int TableGuid { get; set; }

    [XmlAttribute(AttributeName="DataOrigin")]
    public string DataOrigin { get; set; }

    [XmlAttribute(AttributeName="HideThemePath")]
    public string HideThemePath { get; set; }

    [XmlElement(ElementName="Name")]
    public string Name { get; set; }
  }



  [XmlRoot(ElementName="IdentSubItem")]
  public class IdentSubItem {

    [XmlAttribute(AttributeName="ID")]
    public int ID { get; set; }

    [XmlAttribute(AttributeName="ID_Value_Comp")]
    public int ID_Value_Comp { get; set; }
  }



  [XmlRoot(ElementName="IdentCollectionItem")]
  public class IdentCollectionItem {

    [XmlElement(ElementName="IdentSubItem")]
    public List<IdentSubItem> IdentSubItem { get; set; }

    [XmlAttribute(AttributeName="GroupID")]
    public int GroupID { get; set; }

    [XmlAttribute(AttributeName="DimTyp")]
    public int DimTyp { get; set; }

    [XmlAttribute(AttributeName="Gr_Value_Comp")]
    public int Gr_Value_Comp { get; set; }
  }



  [XmlRoot(ElementName="Items")]
  public class Items {

    [XmlElement(ElementName="TableFavoriteData")]
    public List<TableFavoriteData> TableFavoriteData { get; set; }
  }

  [XmlRoot(ElementName="ReportIdentifierEncrypted")]
  public class ReportIdentifierEncrypted {

    [XmlAttribute(AttributeName="Id")]
    public string Id { get; set; }

    [XmlAttribute(AttributeName="Signature")]
    public string Signature { get; set; }

    [XmlText]
    public string Text { get; set; }
  }



  [XmlRoot(ElementName="Report")]
  public class Report {

    [XmlElement(ElementName="Header")]
    public Header Header { get; set; }

    [XmlElement(ElementName="ReportSettings")]
    public ReportSettings ReportSettings { get; set; }

    [XmlElement(ElementName="Items")]
    public Items Items { get; set; }

//        [XmlArray("Items")]
//        public TableFavoriteData[] OrderedItems;

        [XmlElement(ElementName="ReportIdentifierEncrypted")]
    public ReportIdentifierEncrypted ReportIdentifierEncrypted { get; set; }

    [XmlAttribute(AttributeName="FavoriteDocumentType")]
    public string FavoriteDocumentType { get; set; }
  }



  [XmlRoot(ElementName="ReportCollection")]
  public class ReportCollection {

    [XmlElement(ElementName="Report")]
    public Report Report { get; set; }
  }
}



Und hier ist mein Code:
ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Xml.Linq;
using System.Xml.Serialization;

namespace DeSerializer
{
    /// <summary>
    /// Interaktionslogik für MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void BtnSave_Click(object sender, RoutedEventArgs e)
        {
            XmlSerializer();
        }

        //public void XmlSerializer(Type dataType, object data, string filePath)
        public void XmlSerializer()
        {
            try
            {
                //TableFavoriteData tfd = new TableFavoriteData();
                //tfd.Name = "Jan-Dez 2020";
                //TableFavoriteData[] Items = { tfd };

                ReportCollection reportcol = new ReportCollection
                {

                    Report = new Report
                    {
                        //XmlAttribute
                        FavoriteDocumentType = "jaja",

                        //XmlRoot
                        Header = new Header
                        {
                            VersionIntern = 1,
                            LockedBy = "Müller"
                        },

                        //XmlRoot
                        ReportSettings = new ReportSettings
                        {
                            DatabaseSignature = "KTM.DE.122020.877.2-1 oben"
                        },

                        //XmlRoot
                        Items = new Items{

                            
                            //XmlRoot - List
                            //TableFavoriteData = new TableFavoriteData
                            //{
                            //    //XmlAttribute
                            //    TableID = "1091", TableGuid = "401622513", DataOrigin = "TableMenue", HideThemePath = "True"
                            //}

                        },

                        //XmlRoot
                        ReportIdentifierEncrypted = new ReportIdentifierEncrypted
                        {
                            //XmlAttribute
                            Id = "huhu", Signature = "KTM.DE.122020.877.2-1 unten",

                            //XmlText
                            Text = "hjkhdfzdnvndfkgmfc84765tncbxshgfg87l54hfnxu78r5fnjcxnvif8r5mjhjkhdfzdnvndfkgmfc84765tncbxshgfg87l54hfnxu78r5fnjcxnvif8r5mjhjkhdfzdnvndfkgmfc84765tncbxshgfg87l54hfnxu78r5fnjcxnvif8r5mjhjkhdfzdnvndfkgmfc84765tncbxshgfg87l54hfnxu78r5fnjcxnvif8r5mjhjkhdfzdnvndfkgmfc84765tncbxshgfg87l54hfnxu78r5fnjcxnvif8r5mjhjkhdfzdnvndfkgmfc84765tncbxshgfg87l54hfnxu78r5fnjcxnvif8r5mjhjkhdfzdnvndfkgmfc84765tncbxshgfg87l54hfnxu78r5fnjcxnvif8r5mjhjkhdfzdnvndfkgmfc84765tncbxshgfg87l54hfnxu78r5fnjcxnvif8r5mjhjkhdfzdnvndfkgmfc84765tncbxshgfg87l54hfnxu78r5fnjcxnvif8r5mjhjkhdfzdnvndfkgmfc84765tncbxshgfg87l54hfnxu78r5fnjcxnvif8r5mj"
                        }
                    }
                };

                XmlSerializer XmlSerializer = new XmlSerializer(typeof(ReportCollection));
                StreamWriter writer = new StreamWriter("huhu.xml");
                XmlSerializer.Serialize(writer, reportcol);
                writer.Close();
            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            
        }
    }
}




Und meine XML sieht bis jetzt so aus:
ausblenden XML-Daten
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
<?xml version="1.0" encoding="utf-8"?>
<ReportCollection xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Report FavoriteDocumentType="jaja">
    <Header>
      <VersionIntern>1</VersionIntern>
      <Version>1</Version>
      <Id>{2bd2b4e1-ef53-49a4-b81e-f428d9fb6ffa}</Id>
      <Name>DirksXMLerste</Name>
      <Description>Report</Description>
      <Created>2021-03-10 07:00</Created>
      <CreatedBy>ich</CreatedBy>
      <Modified>2021-03-10 07:05</Modified>
      <ModifiedBy>ich</ModifiedBy>
      <LockedBy>ich</LockedBy>
    </Header>
    <ReportSettings>
      <Ranking>0</Ranking>
      <TableVersion>0</TableVersion>
      <ChartVersion>0</ChartVersion>
      <MapVersion>0</MapVersion>
      <DashboardVersion>0</DashboardVersion>
      <DashboardTileVersion>0</DashboardTileVersion>
      <MobileVersion>0</MobileVersion>
    </ReportSettings>
    <Items />
    <ReportIdentifierEncrypted Id="huhu" Signature="Meine Signatur">ganz viel wirrer Text</ReportIdentifierEncrypted>
  </Report>
</ReportCollection>




Jetzt weiß ich nicht, wie ich die äußeren und die inneren Listen erstellen muss.

Äußere Listen:
ausblenden XML-Daten
1:
<TableFavoriteData> </TableFavoriteData>					


Innere Listen:
ausblenden XML-Daten
1:
<TableSubChoiceData> </TableSubChoiceData>					



Hat hier vielleicht jemand einen Tipp? Das mus irgendwie mit 2 zusätzlichen Methoden gemacht werden, denke ich, aber ich bin halt Anfänger in C#. Wäre toll, wenn mir jemand helfen könnte.

Heute schon mal ein schönes Wochenende für Euch und

viele Grüße
Schoppenhonne


Ach ja, beim Drag&Drop habe ich vielleicht das eine oder andere unwichtige Tag weggelassen :)
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 12.03.21 21:38 
Hattest du nicht bei einer letzten Frage die XML Klassen mit einem Tool erstellt (irgendein 3rd Party Ding oder die xsd.exe aus dem SDK)?
In dem Fall funktionieren die Klassen eigentlich in beide Richtungen.
Man muss zum serialisieren keine anderes Klassen Set erzeugen.
Schoppenhonne Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19



BeitragVerfasst: Sa 13.03.21 08:06 
Hallo Ralf,
ja, die Klassen kann man in beiden Richtungen nehmen. Ist jetzt halt nur ein anderes XML-File. Und ich weiß nicht, wie ich das schreiben kann, wegen der Listen in Listen. Auslesen klappt schon. Geht ähnlich, wie bei dem anderen XML-File, welches ich NUR auslesen brauchte.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Sa 13.03.21 09:35 
Du mußt eine Liste erzeugen:
ausblenden C#-Quelltext
1:
2:
3:
4:
TableFavoriteData = new List<TableFavoriteData> // und auch hier wieder die Diskrepanz bei dir in der Namensgebung bzgl. Singular und Plural!
{
  // ...
}

Und codetechnisch solltest du auch ein wenig aufräumen.
Zum einen solltest du für die gesamte Serialisierung eine eigene Klasse erstellen (denn dies hat nichts im UI-Code zu suchen) und, wie du selbst schon geschrieben hast, solltest du für jede zu serialisierende Klasse eine eigene Methode erzeugen (CreateReportCollection(...), CreateReport(...), CreateHeader(...), etc.).
Schoppenhonne Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19



BeitragVerfasst: Di 16.03.21 12:01 
Danke für den Tipp mit der Liste.

Ich habe hier noch nicht weitergemacht, weil ich mir echt unsicher binn, ob ich auf dem richtigen Weg bin. Denn eigentlich will ich ja nur Werte und Eigenschaften einer vorhanden Datei bearbeiten. Die Datei soll so bleiben, wie sie ist. Und da bin ich auf XmlDocument und XDocument gestoßen.

Bin ich damit besser bedient?
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 16.03.21 12:11 
Ja, dann ist die Benutzung von XmlDocument oder XDocument sicherlich besser und einfacher, s.a. Update XML Node value using C#.
XML-Serialisierung benutzt man hauptsächlich, wenn man die gesamten XML-Daten als Modell benötigt.
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Di 16.03.21 14:01 
Wobei auch ein XDocument.Load die ganze Datei parsen muss. Navigieren funktioniert ja nicht per Offset sondern per XPath. Dafür muss man alles mal gesehen haben.
Und beim schreiben erwarte ich das XDocument auch wieder die ganze Datei schreibt. Denn Xml ist auch nicht Block basiert man kann nicht nur einen Block ändern. Wenn ich mitten drin was ändere verschieben sich alle Folgedaten. Mal schnell in Referencesource geschaut passiert da vollständiges parsen und vollständiges schreiben. Nur nicht typisiert wie beim Serializer.

Gefühlt würde ich sagen das der XMLSerializer einfacher zu handhaben ist und wenn man per XDocument arbeitet man eigentlich den gleichen Performance Impact hat. Sehe da also potentiell keinen Vorteil. Ist aber nur Theorie wenn da mal jemand (ich nehme das mal als synonym für den Threadersteller) vergleiche anstellt wäre ich an Ergebnissen interessiert.
Schoppenhonne Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19



BeitragVerfasst: Di 16.03.21 15:05 
Vielen Dank, super Tipp, genau das wars. - Nur, dass ich ein Mix aus XmlDocument und XDocument gemacht habe: XmlDocument für den Inhalt und XDocument für die Eigenschaften.

Viele Grüße
Schoppenhonne
Schoppenhonne Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19



BeitragVerfasst: Di 16.03.21 15:07 
user profile iconRalf Jansen hat folgendes geschrieben Zum zitierten Posting springen:
Wobei auch ein XDocument.Load die ganze Datei parsen muss. Navigieren funktioniert ja nicht per Offset sondern per XPath. Dafür muss man alles mal gesehen haben.
Und beim schreiben erwarte ich das XDocument auch wieder die ganze Datei schreibt. Denn Xml ist auch nicht Block basiert man kann nicht nur einen Block ändern. Wenn ich mitten drin was ändere verschieben sich alle Folgedaten. Mal schnell in Referencesource geschaut passiert da vollständiges parsen und vollständiges schreiben. Nur nicht typisiert wie beim Serializer.

Gefühlt würde ich sagen das der XMLSerializer einfacher zu handhaben ist und wenn man per XDocument arbeitet man eigentlich den gleichen Performance Impact hat. Sehe da also potentiell keinen Vorteil. Ist aber nur Theorie wenn da mal jemand (ich nehme das mal als synonym für den Threadersteller) vergleiche anstellt wäre ich an Ergebnissen interessiert.


Sorry, zu spät gelesen.

Ich habe also fertig. Mit Mix aus XmlDocument und XDocument. Interessiert?
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Di 16.03.21 20:29 
Gern. Wenn dein XML so groß ist das du einen Performanceunterschied feststellen könntest und das auch konntest wäre ich insbesondere daran interessiert.
Schoppenhonne Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19



BeitragVerfasst: Fr 19.03.21 10:40 
Hi Ralf,

hier ändere ich beispiehaft ein Attribut und einen Text:

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
namespace ListInListXML
{
    /// <summary>
    /// Interaktionslogik für MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        //private XDocument doc;
        public string ort = @"C:\Users\User\source\repos\ListInListXML\ListInListXML\Report-Sammlungen.xml";

        public MainWindow()
        {
            InitializeComponent();
        }

        private void BtnGo_Click(object sender, RoutedEventArgs e)
        {
            MachWas();
        }

        public void MachWas()
        {
            
            XDocument doc = XDocument.Load(ort);
            foreach (XElement node in doc.Descendants("Report"))
            {
                node.Attribute("FavoriteDocumentType").Value = "Report";
            }


            foreach (XElement node in doc.Descendants("PackageLogSign"))
            {
                node.Attribute("IdMB").Value = "20";
            }



            XmlDocument doc2 = new XmlDocument();
            doc2.Load(ort);

            XmlNodeList aDateNodes = doc2.SelectNodes("/ReportCollection/Report/ReportSettings");
            foreach (XmlNode aDateNode in aDateNodes)
            {
                XmlAttribute DateAttribute = aDateNode.Attributes["AutoStart"];
                //aDateNode.InnerText = TbxTest.Text;
                aDateNode.InnerText = "Meins";
            }
            doc2.Save(ort);
        }
    }
}


LG
Schoppenhonne