XSD nach eigenen Bedarf anpassen

  • VB.NET

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von Volki2804.

    XSD nach eigenen Bedarf anpassen

    Hallo,

    ich habe folgendes vor:

    Ich bekomme eine fertige XML deren Form ich nicht beeinflussen kann. Gewissen Elemente dieser XML möchte ich letztendlich in eine Access- DB übernehmen.

    Da ich allerdings nur gewisse Teile übernehmen möchte muß ich den Inhalt also Filtern. Ich habe mittlerweile schon LINQ to XML und deserialisieren getestet

    und sogar hinbekommen. Deserialisieren ist viel schneller als LINQ, aber noch nicht schnell genug, da ich den Stream nach dem Einlesen noch Filtern muß

    (habe keinen Weg gefunden die Daten ohne den Stream in ein Dataset zu bekommen, vermutlich weil es keinen Weg ohne den Stream gibt).

    Meine letzte Möglichkeit wäre Dataset.ReadXML. Dazu fehlt mir aber jedes Wissen über die XSD, ohne die ich die Daten nicht bekomme. Natürlich kann ich die

    XSD über VB erstellen lassen, was auch geht, aber dann muß ich die Daten letztendlich doch wieder Filtern, was ich eigendlich vermeiden wollte.

    Daher die Frage: Wie kann ich eine XSD erstellen in der die Daten schon entsprechend gefiltert sind (geht das überhaupt)?

    Hier ein Auszug der XML:

    XML-Quellcode

    1. - <ELEMENT category="XXX" type="YYY" id="ZZZ">
    2. - <ATTRIBUTES>
    3. <PROPERTY name="AAA" value="aaa" />
    4. <PROPERTY name="BBB" value="bbb" />
    5. </ATTRIBUTES>
    6. - <PERIPHERAL parentId="CCC">
    7. - <PHYSICALADDRESS>
    8. <PROPERTY name="d" value="ddd" />
    9. </PHYSICALADDRESS>
    10. <PROPERTY name="FFF" value="fff" />
    11. </PERIPHERAL>
    12. - <FUNCTIONAL parentId="GGG">
    13. - <LOGICALADDRESS>
    14. <PROPERTY name="HHH" value="hhh" />
    15. <PROPERTY name="JJJ" value="jjj" />
    16. <PROPERTY name="KKK" value="kkk" />
    17. </LOGICALADDRESS>
    18. <PROPERTY name="LLL" value="lll" />
    19. <PROPERTY name="MMM" value="mmm" />
    20. <PROPERTY name="NNN" value="nnn" />
    21. </FUNCTIONAL>
    22. </ELEMENT>
    23. - <ELEMENT category="VVV" type="UUU" id="III">
    24. - <ATTRIBUTES>
    25. <PROPERTY name="AAA" value="aaa" />
    26. </ATTRIBUTES>
    27. - <FUNCTIONAL parentId="TTT">
    28. - <LOGICALADDRESS>
    29. <PROPERTY name="HHH" value="RRR" />
    30. <PROPERTY name="SSS" value="ssss" />
    31. <PROPERTY name="EEE" value="eee" />
    32. <PROPERTY name="QQQ" value="qqq" />
    33. <PROPERTY name="WWW" value="www" />
    34. </LOGICALADDRESS>
    35. <PROPERTY name="LLL" value="lll" />
    36. <PROPERTY name="MMM" value="mkm" />
    37. <PROPERTY name="NNN" value="nnn" />
    38. </FUNCTIONAL>
    39. </ELEMENT>



    Wenn ich jetzt die XSD erstellen lasse, so werden Tabellen für jedes Element angelegt, was nicht ganz in meinem Sinne ist.

    Der Wunsch wäre das für jede unterschiedliche Kategorie (category, davon gibt es nur 8) erstellt wird, mit dem PrimKey "Id"

    und alles bis zum nächsten Element als eine neue Spalte in die Tabelle eingefügt wird (Inklusive dem Attribute "Type" des Elements).

    falls das so möglich ist, wäre ich um einen Denkanstoss dankbar, aus dem ich ableiten kann wie ich vorgehen muß.
    verwunderlich, dass du per Deserialisierung zu Ergebnissen kommst, mit Linq2Xml aber auch, und sogar mit Dataset.ReadXml.

    Weil Serialisierung erzeugt eine ganz annere Xml-Struktur als Dataset.WriteXml, und was vom einen geschrieben wurde, läßt sich vom anneren sicherlich nicht richtig lesen.

    Also wenn Deserialisierung hinhaut, dannn sollteste darauf aufbauen, und dir das dabei entstandene Objekt halt genau angucke, welche Properties davon in deine Datenbank sollen.
    Ich schätze mal das heißt , das mein Wunsch nicht so machbar ist. Deserialisierung funzt im übrigen genauso gut, bzw. besser als LINQ, nur nicht so schnell wie ich es gerne hätte. Aber grundsätzlich bekomme

    ich in beiden Fällen die Ergebnisse, die ich haben möchte.