19 messaggi dal 20 aprile 2001
Vi descrivo quello che vorrei fare:
ho una webform che dovrebbe funzionare da template (desktop.aspx), il cui contenuto delle pagine poi è gestito da un file xml con diverse trasformazioni xslt.

il codice è
<script runat="server">
void Page_Load(object sender, System.EventArgs e)
{
// code to load specific xml and xslt by querystring
// calls: desktop.aspx?page=risorse&id=articoli or
desktop.aspx?page=eventi&id=msdn
string page = Request.QueryString["page"];
string subpage = Request.QueryString["subpage"];
string id = Request.QueryString["id"];
switch (page)
{
case "risorse":
Xml1.DocumentSource = "risorse.xml";
switch (id)
{
case "articoli":
Xml1.TransformSource = "showarticles.xslt";
break;
case "code":
Xml1.TransformSource = "showcode.xslt";
break;
case "downloads":
Xml1.TransformSource = "showdownloads.xslt";
break;

}
break;
case "eventi":
this.Xml1.DocumentSource="eventi.xml";
switch (id)
{
case "msdn":
this.Xml1.TransformSource="showmsdnevents.xslt";
break;
case "technet":
this.Xml1.TransformSource="showtechnetevents.xslt";
break;
case "other":
this.Xml1.TransformSource="showotherevents.xslt";
break; }
break;
case "":
Response.Redirect("index.aspx"); //back to default page
break;
}

}
</script>
.......some html code
<asp:Xml id="Xml1" runat="server" />
...some html code

e funziona correttamente. Ora però vorrei togliere gli switch nidifcati ed associargli un ulteriore file xml (config.xml) che fa da configuratore.

<sito>
<section page="risorse" xmlsrc="risorse.xml">
<subsection id="articoli" xslt="showarticles.xslt" />
<subsection id="code" xslt="showcode.xslt" />
<subsection id="downloads" xslt="showdownloads.xslt" />
</section>
<section page="eventi" xmlsrc="eventi.xml">
<subsection id="msdn" xslt="showmsdnevents.xslt" />
<subsection id="technet" xslt="showtechnetevents.xslt" />
<subsection id="other" xslt="showotherevents.xslt" />
</section>
</sito>

ho pensato quindi ad una funzione CallXmlAndXslt(page, id) che invia i parametri page ed id letti dalla querystring, cioè se l'url è

http://webserver/desktop.aspx?page=risorse&id=code, il codice dovrebbe essere:

string page = Request.QueryString["page"];
string id = Request.QueryString["id"];
CallXmlAndXslt(page, id);

la funzione ora dovrebbe scansionare il file xml e pescare il nodo section con il parametro page=risorse restituire xmlsrc, ed all'interno il parametro id nel nodo subsection e restituirmi xslt. Pensavo a una cosa del genere:

public void CallXmlAndXslt(string p, string i)
{
string c_xml, c_xslt;
XmlDocument myXmlDocument = new XmlDocument();
myXmlDocument.Load(Server.MapPath("config.xml"));
XPathNavigator myXPathNavigator = myXmlDocument.CreateNavigator();
string Espr = "sito/section";
string Espr2 = "sito/section/subsection";
myXPathNavigator.MoveToRoot();
XPathExpression myXPathExpr = myXPathNavigator.Compile(Espr);
XPathExpression myXPathExpr2 = myXPathNavigator.Compile(Espr);
XPathNodeIterator myXPathNodeIterator =
myXPathNavigator.Select(myXPathExpr);
XPathNodeIterator myXPathNodeIterator2 =
myXPathNavigator.Select(myXPathExpr2);

while (myXPathNodeIterator.MoveNext())
{
if (p=myXPathNodeIterator.Current.GetAttribute("page",""))
{
c_xml = myXPathNodeIterator.Current.GetAttribute("xmlsrc",""));
return c_xml;
if (i = myXPathNodeIterator2.Current.GetAttribute("id",""));
{
c_xslt = myXPathNodeIterator2.Current.GetAttribute("xslt",""));
return c_xslt;
}
}
}

ma mi sfugge qualcosa, Che ne pensate?

ciao

&lt;Alberto/&gt;

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.