XmlTextReader Problem
-
Ich hab folgendes Problem:
aus einer XML Datei möchte ich etwas herauslesen, was an der Stelle <title> steht. Z.B.:
Code:
<?xml version="1.0" encoding="utf-8" ?>
<Bookdata>
<lastedit initials="FK">01102005</lastedit>
<settings>
<book>
<location>Dummyloc</location>
<title>Der Titel</title>
</book>
</settings>
</Bookdata>
Code:
<?xml version="1.0" encoding="utf-8" ?>
<Bookdata>
<lastedit initials="FK">01102005</lastedit>
<settings>
<book>
<location>Dummyloc</location>
<title>Der Titel</title>
</book>
</settings>
</Bookdata>
Code:
<?xml version="1.0" encoding="utf-8" ?>
<Bookdata>
<lastedit initials="FK">01102005</lastedit>
<settings>
<book>
<location>Dummyloc</location>
<title>Der Titel</title>
</book>
</settings>
</Bookdata>Nun nehme ich eine Konstruktion, z.B. eine IF anweisung:
C/C++ Code:
XmlTextReader* xtr = new XmlTextReader(path);while(xtr->Read())
{
if(xtr->NodeType == XmlNodeType::Text && xtr->Name == "title")
{return xtr->Value;
}
(...)
C/C++ Code:
XmlTextReader* xtr = new XmlTextReader(path);while(xtr->Read())
{
if(xtr->NodeType == XmlNodeType::Text && xtr->Name == "title")
{return xtr->Value;
}
(...)
C/C++ Code:
XmlTextReader* xtr = new XmlTextReader(path);while(xtr->Read())
{
if(xtr->NodeType == XmlNodeType::Text && xtr->Name == "title")
{return xtr->Value;
}
(...)Leider führt das so zu nichts, dennoch würde ich gern auf diese Art und Weise (Vergleich des Knotennamens) irgendwie an meine Daten kommen, numerische Vergleich hinsichtl. Verschachtelungstiefe will ich nicht haben, da das XML File sich ncoh ändern kann, ich dann aber nicht allen Code ändern will, der tagname aber gleich beliebn wird.
Ich finde die passende Methode nicht. Gibt es eine?
Im Prinzip soll es so funktionieren:
"Wenn ein Tag Namens "title" gefunden wird, denn liefere den Textinhalt zurück".
Das kann doch jetzt nicht so speiziell sein...
Sorry für den Repost, aber im C#/.NET Forum bekomme ich nur gesagt, dass sei ja C++...
-
Ich Rate Dir zu einer Abfrage via XPath...
C#:System.Xml.XmlDocument doc = new System.Xml.XmlDocument(); doc.Load(@"f:\a.xml"); string title = doc.SelectSingleNode("/Bookdata/settings/book/title").InnerText; Console.WriteLine(title);
-
Danke. Hatte ich in einer späteren Version sowieso vor. jetzt habe ich es ein wenig "gestelzt" gemacht, sofern der Elementknoten "title" gefunden ist, einfach einen Knoten weiter Springen und lesen.
while(xtr->Read()) { if(xtr->NodeType== XmlNodeType::Element) { String* comp = xtr->Name; if(String::Compare(comp, S"title")==0) { xtr->Read(); return xtr->Value; } } } return S"Path not Found!"; }