Autor |
Beitrag |
Schoppenhonne
Beiträge: 19
|
Verfasst: 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:
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"?>
<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:
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; }
[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:
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 { public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); }
private void BtnSave_Click(object sender, RoutedEventArgs e) { XmlSerializer(); }
public void XmlSerializer() { try { ReportCollection reportcol = new ReportCollection {
Report = new Report { FavoriteDocumentType = "jaja",
Header = new Header { VersionIntern = 1, LockedBy = "Müller" },
ReportSettings = new ReportSettings { DatabaseSignature = "KTM.DE.122020.877.2-1 oben" },
Items = new Items{
},
ReportIdentifierEncrypted = new ReportIdentifierEncrypted { Id = "huhu", Signature = "KTM.DE.122020.877.2-1 unten",
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:
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:
XML-Daten 1:
| <TableFavoriteData> </TableFavoriteData> |
Innere Listen:
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
Beiträge: 4705
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: 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
Beiträge: 19
|
Verfasst: 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
Beiträge: 4784
Erhaltene Danke: 1055
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Sa 13.03.21 09:35
Du mußt eine Liste erzeugen:
C#-Quelltext 1: 2: 3: 4:
| TableFavoriteData = new List<TableFavoriteData> { } |
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
Beiträge: 19
|
Verfasst: 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
Beiträge: 4784
Erhaltene Danke: 1055
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: 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
Beiträge: 4705
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: 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
Beiträge: 19
|
Verfasst: 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
Beiträge: 19
|
Verfasst: Di 16.03.21 15:07
Ralf Jansen hat folgendes geschrieben : | 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
Beiträge: 4705
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: 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
Beiträge: 19
|
Verfasst: Fr 19.03.21 10:40
Hi Ralf,
hier ändere ich beispiehaft ein Attribut und einen Text:
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 { public partial class MainWindow : Window { 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 = "Meins"; } doc2.Save(ort); } } } |
LG
Schoppenhonne
|
|