Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Fragen bzgl. XML/Dataset und Speicherung
smilingbandit
myCSharp.de - Member



Dabei seit:
Beiträge: 151
Herkunft: Nürnberg

Themenstarter:

Fragen bzgl. XML/Dataset und Speicherung

beantworten | zitieren | melden

verwendetes Datenbanksystem: Späterer Zugriff: MySql

Hallo zusammen!

Meine Applikation soll mal auf einem kleinen Laptop bzw. PDA laufen. Es sollen Meßdaten gespeichert werden, die (sobald möglich) dann mal auf Knopfdruck in eine MySQL-Datenbank gespeichert werden.

Jetzt dachte ich mir, bevor ich den armen PDA mit einer lokalen Datenbank quäle, speichere ich die Daten in XML.

Zu Beginn hatte ich mir noch überlegt, für jeden Datensatz eine eigene Datei anzulegen, bin dann aber davon abgekommen, als ich in einem Tutorial auf den

XmlWriter aufmerksam geworden bin, der einem ein Dataset in schönes XML speichert. Kommt mir entgegen, weil ich

1. Nicht mit XML direkt herumhantieren müsste

2. Ich mir einfacher eine Struktur für die Daten überlegen kann (hab mit SQL einfach schon viel mehr gemacht als mit XML)

3. Dann (soweit ichs verstanden habe) das Interpretieren für den "Upload" dann ziemlich einfach gehen sollte.

Allerdings sind mir noch ein paar Fragen offen geblieben, bei denen mir das Tutorial nicht helfen konnte.

-Kann man sozusagen "Normalformen" damit Realisieren? Also dass es in XML mehrere Ebenen gibt (Tabelle 1 Zeigt nur IDs, die IDs verweisen jeweils auf eine Tabelle mit Werten drin)

-Ist es möglich, eine Datei auf diese Art zu öffnen, und und dabei nicht ihren Inhalt komplett zu überschreiben sondern

-Bestimmte Einträge zu suchen und dann anhand eines Kriteriums zu löschen?

Wäre mit eine grosse Hilfe, danke schonmal
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von smilingbandit am .
private Nachricht | Beiträge des Benutzers
juetho
myCSharp.de - Member



Dabei seit:
Beiträge: 3.331
Herkunft: Berlin

beantworten | zitieren | melden

Zitat
Original von smilingbandit
-Kann man sozusagen "Normalformen" damit Realisieren? Also dass es in XML mehrere Ebenen gibt (Tabelle 1 Zeigt nur IDs, die IDs verweisen jeweils auf eine Tabelle mit Werten drin)
Grundsätzlich ja. Du kannst DataRelations auch per Xml abbilden und nutzen. Grundlage ist ein XSD-Schema, das z.B. die Tabellen ORT mit den Feldern ID, Name sowie PLZ mit den Feldern PLZ, Ort_ID enthält und dazu festlegt:
<!--  PrimaryKey für ORT  -->
<xs:unique msdata:PrimaryKey="true" name="Ort_PK">
	<xs:selector xpath=".//ORT" />
	<xs:field xpath="ID" />
</xs:unique>
<!--  PrimaryKey für PLZ  -->
<xs:unique msdata:PrimaryKey="true" name="PLZ_PK">
	<xs:selector xpath=".//PLZ" />
	<xs:field xpath="ID" />
</xs:unique>
<!--  ForeignKey / DataRelation für PLZ auf ORT  -->
<xs:keyref name="PLZ_FK_Ort" refer="Ort_PK">
	<xs:selector xpath=".//PLZ" />
	<xs:field xpath="Ort_ID" />
</xs:keyref>
Für Einzelheiten könntest Du Dir ein DataSet mit DataTables erstellen (auf welchem Weg auch immer), dazu das Schema speichern mit WriteXmlSchema() und dann das Schema untersuchen.
Zitat
-Ist es möglich, eine Datei auf diese Art zu öffnen, und und dabei nicht ihren Inhalt komplett zu überschreiben sondern
Eher nein. Mit ReadXml/WriteXml() wird immer die vollständige Datei eingelesen. Du könntest allenfalls versuchen, die Datei als XmlDocument manuell einzulesen und zu untersuchen; aber das wird vermutlich viel zu aufwändig.
Zitat
-Bestimmte Einträge zu suchen und dann anhand eines Kriteriums zu löschen?
Aus dem gleichen Grund: faktisch nicht möglich.

In der Praxis ist eine Xml-Datei als Datenbank-Ersatz geeignet als Nachschlagetabelle (z.B. für die Liste der PLZ/Ortsnamen), zum Datenaustausch und für kleine Dateien, die nur selten und/oder von einer einzelnen Stelle aus bearbeitet werden.

Ich hoffe, Du kannst mit diesen Hinweisen etwas anfangen. Jürgen
private Nachricht | Beiträge des Benutzers
Wolf_maYer
myCSharp.de - Member

Avatar #avatar-2284.jpg


Dabei seit:
Beiträge: 286
Herkunft: Bochum

beantworten | zitieren | melden

Zitat
-Bestimmte Einträge zu suchen und dann anhand eines Kriteriums zu löschen?

Naja, es ist nicht möglich nur den bestimmten Teil zu öffnen aber mit xPath ist es möglich bestimmte Knoten zu finden und dementsprechend auch zu eliminieren.

Gruß, maYer
private Nachricht | Beiträge des Benutzers
smilingbandit
myCSharp.de - Member



Dabei seit:
Beiträge: 151
Herkunft: Nürnberg

Themenstarter:

beantworten | zitieren | melden

Hallo juetho,

vielen Dank für die Hinweise, hatte fast "befürchtet" dass dann ein XSD-Schema mit herhalten muss

Was die Problematik mit dem Suchen/Löschen/Überschreiben angeht, so ist das natürlich nicht so prickelnd. Im schlimmsten Fall muss ich dann wohl doch auf die Methodik mit der einen Datei pro Datensatz arbeiten, und das dann über die diversen File-Klassen handeln...mal sehen ob mir noch was anderes einfällt und was der Chef dazu sagt *g*

danke jedenfalls
private Nachricht | Beiträge des Benutzers
juetho
myCSharp.de - Member



Dabei seit:
Beiträge: 3.331
Herkunft: Berlin

beantworten | zitieren | melden

Zitat
Original von smilingbandit
... hatte fast "befürchtet" dass dann ein XSD-Schema mit herhalten muss...
Das sehe ich nach meinen Erfahrungen überhaupt nicht als Problem an. Wenn Du einmal die Struktur verstanden hast, ist es überhaupt kein Problem, ein Schema schnell manuell zu erstellen. Jürgen
private Nachricht | Beiträge des Benutzers
smilingbandit
myCSharp.de - Member



Dabei seit:
Beiträge: 151
Herkunft: Nürnberg

Themenstarter:

beantworten | zitieren | melden

Damit ich nicht durcheinander komme:

So wie sich die Tuts und Dokus lesen, ist ein XSD-Schema eine "Schablone" für XML-Dokumente. Verstehe ich das richtig?

Kann es sich dabei auch um eine "Schablone" für einen "Datensatz" handeln, welcher dann in einer Datei mehrfach vorhanden ist (mit unterschiedlichen Werten natürlich)?
private Nachricht | Beiträge des Benutzers
Wolf_maYer
myCSharp.de - Member

Avatar #avatar-2284.jpg


Dabei seit:
Beiträge: 286
Herkunft: Bochum

beantworten | zitieren | melden

Ja klar.

Hier mal zur Verdeutlichung eine kleine xsd Datei:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
	<!-- Element Definitionen -->
	<xs:element name="ID" type="xs:integer" />
	<xs:element name="Typ" type="enumMessageType" />
	<xs:element name="Text" type="xs:string" />
	<xs:element name="LogText" type="xs:string" />
	<!-- Enumerationen -->
	<xs:simpleType name="enumMessageType">
		<xs:restriction base="xs:string">
			<xs:enumeration value="Warnung" />
			<xs:enumeration value="Fehler" />
			<xs:enumeration value="Info" />
			<xs:enumeration value="Hinweis" />
			<xs:enumeration value="Frage" />
		</xs:restriction>
	</xs:simpleType>
	<!-- Struktur Definition -->
	<!-- Root -->
	<xs:element name="MsgRoot">
		<xs:complexType>
			<xs:sequence>
				<xs:element name="Message" type="MessageType" minOccurs="0" maxOccurs="unbounded">
				</xs:element>
			</xs:sequence>
		</xs:complexType>
		<!--Eindeutigkeits-Definition-->
		<xs:unique name="MsgID">
			<xs:selector xpath="Message" />
			<xs:field xpath="ID" />
		</xs:unique>
	</xs:element>
	<xs:complexType name="MessageType">
		<xs:sequence>
			<xs:element ref="ID" />
			<xs:element ref="Typ" />
			<xs:element ref="Text" />
			<xs:element ref="LogText" />
		</xs:sequence>
	</xs:complexType>
</xs:schema>

Der ComplexType MessageType wird unten definiert und oben benutzt.
Zusätzlich habe ich oben eine Enumeration für den Messagetyp eingebunden und unten eine Eindeutigkeitsbeschränkung auf das Element ID gelegt.

Der MessageType ist allerdings auch wieder weiter schachtelbar

Ich hoffe, es hilft dir.

Gruß, maYer
private Nachricht | Beiträge des Benutzers
smilingbandit
myCSharp.de - Member



Dabei seit:
Beiträge: 151
Herkunft: Nürnberg

Themenstarter:

beantworten | zitieren | melden

Ja das hat schonmal zum Verständnis beigetragen danke Were mich nochmal weiter durch Tutorials schlagen und eventuell hab ich ja noch Fragen
private Nachricht | Beiträge des Benutzers