Teamviewer
Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   
    
Bücher-Shop mit Amazon (Buchkategorien):  C++ : Referenzen zu C++ : C++ Builder : Visual C++ : C# : Java : Spieleprogrammierung : Systemprogrammierung Linux : COM & DCOM : .NET : Compilertechnik : Algorithmen & Datenstrukturen : Objektorientierung : Entwurfsmuster : UML : eXtreme Programming : Projektmanagement : Software-Testing
C/C++ Forum :: C++/CLI mit .NET ::  XML-Dateien  
Gehen Sie zu Seite 1, 2  Weiter
  Zeige alle Beiträge auf einer Seite
Auf Beitrag antworten
Autor Nachricht
Hotte
Mitglied

Benutzerprofil
Anmeldungsdatum: 03.06.2009
Beiträge: 27
Beitrag Hotte Mitglied 15:50:14 08.02.2010   Titel:   XML-Dateien            Zitieren

Hallo Leute,

hab mal eine Frage, wie kann ich eine XML-Datei einlesen wenn ich nicht das Schema kenne. Im Moment muss ich genau die richtige Reihenfolge(Schema) im Programm eingeben, sobald ich diese ändere kann er die XML-Datei nicht mehr einlesen.
Er bricht es mit folgender Fehlermeldung ab:
C++/CLI:
Eine nicht behandelte Ausnahme des Typs "System.InvalidOperationException" ist in System.Xml.dll aufgetreten.

Zusätzliche Informationen: Fehler im XML-Dokument (2,2).
C++/CLI:
Eine nicht behandelte Ausnahme des Typs "System.InvalidOperationException" ist in System.Xml.dll aufgetreten.

Zusätzliche Informationen: Fehler im XML-Dokument (2,2).
C++/CLI:
Eine nicht behandelte Ausnahme des Typs "System.InvalidOperationException" ist in System.Xml.dll aufgetreten.

Zusätzliche Informationen: Fehler im XML-Dokument (2,2).


Auf der Seite von msdn zum Thema Schema werde ich nicht ganz schlau raus.
MfG
Hotte
theta
Mitglied

Benutzerprofil
Anmeldungsdatum: 26.09.2008
Beiträge: 1865
Beitrag theta Mitglied 16:23:44 08.02.2010   Titel:              Zitieren

Ja, dann zeig mal dein XML Dokument und das Schema!
Hotte
Mitglied

Benutzerprofil
Anmeldungsdatum: 03.06.2009
Beiträge: 27
Beitrag Hotte Mitglied 07:47:42 09.02.2010   Titel:   Die XML-Datei            Zitieren

Sobald ich nun zum Beispiel die XML-Struktur ändere kommt die oben beschriebene Fehlermeldung. Eine Grundsätzliche Frage zum einlesen von XML-Dateien, wie kann ich eine XML-Datei einlesen wo ich nicht genau die Struktur/Schema weiß? Hat jedes XML-File ein Schema hinterlegt? Wie kann so ein Schmea erstellt werden, dass alle Programme die XML-Datei einlesen können?

Für jede Antwort bin ich Dankbar.
MfG
Hotte

HTML Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version="1.0" encoding="utf-8" ?>
-
<CXML_Samlung xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
-
<Filme>
-
<CXML_Struktur>
 
<text1>Die Möwe</text1>
 
<text2>Alfred Hitchcock</text2>
 
</CXML_Struktur>
-
<CXML_Struktur>
 
<text1>Psycho</text1>
 
<text2>Alfred Hitchcock</text2>
 
</CXML_Struktur>
 
</Filme>
 
</CXML_Samlung>
HTML Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version="1.0" encoding="utf-8" ?>
-
<CXML_Samlung xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
-
<Filme>
-
<CXML_Struktur>
<text1>Die Möwe</text1>
<text2>Alfred Hitchcock</text2>
</CXML_Struktur>
-
<CXML_Struktur>
<text1>Psycho</text1>
<text2>Alfred Hitchcock</text2>
</CXML_Struktur>
</Filme>
</CXML_Samlung>
HTML Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version="1.0" encoding="utf-8" ?>
-
<CXML_Samlung xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
-
<Filme>
-
<CXML_Struktur>
 
<text1>Die Möwe</text1>
 
<text2>Alfred Hitchcock</text2>
 
</CXML_Struktur>
-
<CXML_Struktur>
 
<text1>Psycho</text1>
 
<text2>Alfred Hitchcock</text2>
 
</CXML_Struktur>
 
</Filme>
 
</CXML_Samlung>
theta
Mitglied

Benutzerprofil
Anmeldungsdatum: 26.09.2008
Beiträge: 1865
Beitrag theta Mitglied 08:57:21 09.02.2010   Titel:              Zitieren

Die Struktur ist festgelegt (XML Meta), der Inhalt jedoch nicht.

Das Schema brauchst Du nicht um dein File parsen zu können, sondern um zu überprüfen ob bestimmte Regeln eingehalten wurden. Es ist optional.

Zitat:
Eine Grundsätzliche Frage zum einlesen von XML-Dateien, wie kann ich eine XML-Datei einlesen wo ich nicht genau die Struktur/Schema weiß?

Der Parser bietet dir die Möglichkeit Knoten und Werte zu lesen, etc.
Natülich ist apriori Wissen notwendig (mit oder ohne Schema). Du musst in deim Programm wissen, was Du lesen möchtest und sicherstellen, dass auch das erwartete so ist wie es sein soll.

Simon
Hotte
Mitglied

Benutzerprofil
Anmeldungsdatum: 03.06.2009
Beiträge: 27
Beitrag Hotte Mitglied 09:27:17 09.02.2010   Titel:              Zitieren

Kanst du mir dann einen Tipp geben wie so ein Code aussehen soll. Ich lese meine XML-Dateien mit der Funktion StreamReader ein und möchte eigentlich mit dieser Funktion beliebige XML-Dateien einlesen ohne die Struktur vorzugeben.
Mein Code:
C++/CLI:
CXML_Filmliste ^temp = gcnew CXML_Filmliste();
StreamReader ^sr = gcnew StreamReader(Speicherort);
XmlSerializer ^xs = gcnew XmlSerializer(CXML_Filmliste::typeid);
temp = (CXML_Filmliste^) xs->Deserialize(sr);
sr->Close();
C++/CLI:
CXML_Filmliste ^temp = gcnew CXML_Filmliste();
StreamReader ^sr = gcnew StreamReader(Speicherort);
XmlSerializer ^xs = gcnew XmlSerializer(CXML_Filmliste::typeid);
temp = (CXML_Filmliste^) xs->Deserialize(sr);
sr->Close();
C++/CLI:
CXML_Filmliste ^temp = gcnew CXML_Filmliste();
StreamReader ^sr = gcnew StreamReader(Speicherort);
XmlSerializer ^xs = gcnew XmlSerializer(CXML_Filmliste::typeid);
temp = (CXML_Filmliste^) xs->Deserialize(sr);
sr->Close();


Mit der Klasse CXML_Filmliste lege ich fest, wie die XML-Datei aufgebaut ist. Nun möchte ich das gerne variable halten und nur nach bestimmten Einträge in der XML Datei suchen.
MfG
Hotte
theta
Mitglied

Benutzerprofil
Anmeldungsdatum: 26.09.2008
Beiträge: 1865
Beitrag theta Mitglied 10:08:42 09.02.2010   Titel:              Zitieren

Falls Du keinen guten Grund hast nicht DOM zu verwenden, rate ich dir zu DOM.
Ist (finde ich) komfortabler.

Hier der Einstieg:
http://msdn.microsoft.com/en-us/library/system.xml.xmldocument.aspx

Ich würde deine Filmliste nicht via Serialize/Deserialize perstisieren.

Simon
Hotte
Mitglied

Benutzerprofil
Anmeldungsdatum: 03.06.2009
Beiträge: 27
Beitrag Hotte Mitglied 12:21:42 09.02.2010   Titel:              Zitieren

[quote="theta"]Falls Du keinen guten Grund hast nicht DOM zu verwenden, rate ich dir zu DOM.
Ist (finde ich) komfortabler.

Einstig gefunden nur komme ich jetzt nicht weiter:

XML einlesen:
C++/CLI:
 FileStream ^fs = File::OpenRead(Speicherort);
 XmlReader^xrd = XmlReader::Create(fs);
 XmlDocument^ doc = gcnew XmlDocument();
 doc->Load(xrd);
 ProcessDom(doc);
 xrd->Close();
 fs->Close();
C++/CLI:
FileStream ^fs = File::OpenRead(Speicherort);
XmlReader^xrd = XmlReader::Create(fs);
XmlDocument^ doc = gcnew XmlDocument();
doc->Load(xrd);
ProcessDom(doc);
xrd->Close();
fs->Close();
C++/CLI:
 FileStream ^fs = File::OpenRead(Speicherort);
 XmlReader^xrd = XmlReader::Create(fs);
 XmlDocument^ doc = gcnew XmlDocument();
 doc->Load(xrd);
 ProcessDom(doc);
 xrd->Close();
 fs->Close();

XML auswerten:
C++/CLI:
String^ test = test->Empty;
XmlNode ^station;
XmlElement ^xelem = xd->DocumentElement;
station = xelem->SelectSingleNode("/Film/CXML_Struktur/text1/text()");
test = station->Value;
C++/CLI:
String^ test = test->Empty;
XmlNode ^station;
XmlElement ^xelem = xd->DocumentElement;
station = xelem->SelectSingleNode("/Film/CXML_Struktur/text1/text()");
test = station->Value;
C++/CLI:
String^ test = test->Empty;
XmlNode ^station;
XmlElement ^xelem = xd->DocumentElement;
station = xelem->SelectSingleNode("/Film/CXML_Struktur/text1/text()");
test = station->Value;


Fehler gefunden: Bei SelectSingleNode die Struktur/Schema mit einbezogen. Ist jetzt korrigiert!


Zuletzt bearbeitet von Hotte am 12:30:08 09.02.2010, insgesamt 1-mal bearbeitet
theta
Mitglied

Benutzerprofil
Anmeldungsdatum: 26.09.2008
Beiträge: 1865
Beitrag theta Mitglied 12:25:34 09.02.2010   Titel:              Zitieren

Benutze den Debugger und finde heraus warum welche Ref. null ist.
Simon
Hotte
Mitglied

Benutzerprofil
Anmeldungsdatum: 03.06.2009
Beiträge: 27
Beitrag Hotte Mitglied 12:48:00 09.02.2010   Titel:              Zitieren

Habe nun noch das Problem, dass ich die XML-Datei nicht richtig durchlaufen kann.
Bei meiner Schleife, erhallte ich immer nur den ersten Wert des ersten Knoten und nicht die anderen Werte. Kann mir vielleicht nochmal jemand helfen?

C++/CLI:
1
2
3
4
5
6
7
8
9
10
11
12
1
2
3
4
5
6
7
8
9
10
11
12
String^ test;
test = String::Empty;
XmlNode ^station;
XmlElement ^xelem = xd->DocumentElement;
XmlNodeList^titels = xelem->GetElementsByTagName("text1");
       
for each (XmlNode^ ti in titels)
{
station = xelem->SelectSingleNode("/Film/CXML_Struktur/text1/text()");
test = station->Value;
...
}
C++/CLI:
1
2
3
4
5
6
7
8
9
10
11
12
String^ test;
test = String::Empty;
XmlNode ^station;
XmlElement ^xelem = xd->DocumentElement;
XmlNodeList^titels = xelem->GetElementsByTagName("text1");

for each (XmlNode^ ti in titels)
{
station = xelem->SelectSingleNode("/Film/CXML_Struktur/text1/text()");
test = station->Value;
...
}
C++/CLI:
1
2
3
4
5
6
7
8
9
10
11
12
String^ test;
test = String::Empty;
XmlNode ^station;
XmlElement ^xelem = xd->DocumentElement;
XmlNodeList^titels = xelem->GetElementsByTagName("text1");
       
for each (XmlNode^ ti in titels)
{
station = xelem->SelectSingleNode("/Film/CXML_Struktur/text1/text()");
test = station->Value;
...
}
theta
Mitglied

Benutzerprofil
Anmeldungsdatum: 26.09.2008
Beiträge: 1865
Beitrag theta Mitglied 13:49:33 09.02.2010   Titel:              Zitieren

Warum iterierst Du über die Titels und holt drinnnen aber trotzdem immer dieselbe Node?

Machs z.B. so:
C++/CLI:
1
2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
XmlElement^ docElement = doc->DocumentElement;
XmlNodeList^ nodes = docElement->SelectNodes(L"CXML_Samlung/Filme/CXML_Struktur");
       
for each (XmlNode^ node in nodes)
{
   XmlNode^ text1Node = node->SelectSingleNode(L"text1/text()")
   String^ text1 = text1Node->Value;
}
C++/CLI:
1
2
3
4
5
6
7
8
XmlElement^ docElement = doc->DocumentElement;
XmlNodeList^ nodes = docElement->SelectNodes(L"CXML_Samlung/Filme/CXML_Struktur");

for each (XmlNode^ node in nodes)
{
XmlNode^ text1Node = node->SelectSingleNode(L"text1/text()")
String^ text1 = text1Node->Value;
}
C++/CLI:
1
2
3
4
5
6
7
8
XmlElement^ docElement = doc->DocumentElement;
XmlNodeList^ nodes = docElement->SelectNodes(L"CXML_Samlung/Filme/CXML_Struktur");
       
for each (XmlNode^ node in nodes)
{
   XmlNode^ text1Node = node->SelectSingleNode(L"text1/text()")
   String^ text1 = text1Node->Value;
}


Simon
C/C++ Forum :: C++/CLI mit .NET ::  XML-Dateien  
Gehen Sie zu Seite 1, 2  Weiter
Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.