PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Xquery: Auslesen aller vorhandenen Attribute


clodetta
03.11.2008, 13:13
Hallohalli,
ich verzweifel hier grad :mauer:
und zwar hab ich folgendes xml:

<?xml version="1.0" encoding="ISO-8859-1"?>
<DataSetContainer>
<DataSet CategoryID="Seminars">
<seminar>
<date>01.10.2008</date>
<dueto>01.10.2009</dueto>
<topic>Hannover Sitzung</topic>
</seminar>
</DataSet>
<DataSet CategoryID="Other">
<seminar>
<date>01.11.2008</date>
<dueto>01.10.2009</dueto>
<topic>Hamburg Kulturcafe</topic>
</seminar>
</DataSet>
</DataSetContainer>

so, ich möchte jetz via xquery alle vorhandenen DataSet-nodes durchgehen und mir den Wert des Attributes CategoryID holen und in die dropdownlist CategorySelector zu schieben.
folgenden source habbich:

XQueryNavigatorCollection XQColl = new XQueryNavigatorCollection();
XQColl.AddNavigator(Server.MapPath("seminars.xml"), "seminars");
string query = "let $event-doc := document('seminars') " +
"For $d in $event-doc/DataSetContainer/BoberskiDataSet[CategoryID] " +
"return $d ";
XQueryExpression expr = new XQueryExpression(query);

CategorySelector.Items.Add((expr.Execute(XQColl)).ToXml());

daß das so noch nich funzen kann is mir klar, da expr.Execute(XQColl)).ToXml()
ja einen string zurückliefert.
das zum einen.
aber ich wäre froh, wenn er mal überhaupt was zurückliefern würde, denn diese testteile hier erhalten mal goar nix zurückgeliefert, was mich sehr ärgert:

Literal1.Text = expr.Execute(XQColl).ToXml();
string results = expr.Execute(XQColl).ToXml();
Response.Write(results);


was mach ich denn falsch (mal abgesehen davon, nicht LINQ dafür zu benutzen, denn da werden die queries ja vorher compiliert und - bei fehlerhaftem code - ja auch bemängelt...) ???
:confused:
liebe grüsse,
die clodetta

edit:
achso, folgende query half auch nicht

string query = "let $event-doc := document('seminars') " +
"For $d in $event-doc/DataSetContainer/BoberskiDataSet " +
"return $d/@CategoryID ";


clodetta
04.11.2008, 12:52
hallihallo,
habe gerade mal den doch zu ungenauen titel geändert; denn es handelt sich ja nun eigentlich eher um FLWR expressions.
leider habe ich immer noch keinen schimmer, weshalb er mir nicht die attribute ausliest.
folgende xpression hab ich:

string query = "let $event-doc := document('seminars') " +
"For $d in $event-doc//DataSetContainer/DataSet " +
"return if($d/@CategoryID='Seminars') " +
"then $d/@CategoryID " +
"else () ";

der witz jetz an der sache ist, daß ich den attributwert in der if -abfrage auslesen kann, aber anschließend nix ausgeben kann.
wie geht sowas? im if statement steht doch in $d/@CategoryID 'Seminars', schließlich geht er da ja auch rein.
warum also kann ich dann nicht $d/@CategoryID verwenden, um 'Seminars' ausgeben zu lassen??? es kommen nur leere dinger an im then-zweig.


mache ich hingegen:

string query = "let $event-doc := document('seminars') " +
"For $d in $event-doc//DataSetContainer/DataSet " +
"return if($d/@CategoryID='Seminars') " +
"then 'supersache, seminars gefunden' " +
"else ('nix gefunden') ";


gibt er mir anhand obigen xml einmal supersache,... und einmal nixgefunden aus; so wie man´s auch erwartet hätte... -.-
falls irgendwer ne ahnung/vermutung hat, immer her damit
;)
liebe grüsse,
die clodetta