<Error>
<StackTrace>
at System.Security.CodeAccessSecurityEngine.ThrowSecurityException(Assembly asm, PermissionSet granted, PermissionSet refused, RuntimeMethodHandle rmh, SecurityAction action, Object demand, IPermission permThatFailed)
at System.Security.CodeAccessSecurityEngine.ThrowSecurityException(Object assemblyOrString, PermissionSet granted, PermissionSet refused, RuntimeMethodHandle rmh, SecurityAction action, Object demand, IPermission permThatFailed)
at System.Security.CodeAccessSecurityEngine.CheckSetHelper(PermissionSet grants, PermissionSet refused, PermissionSet demands, RuntimeMethodHandle rmh, Object assemblyOrString, SecurityAction action, Boolean throwException)
at System.Security.CodeAccessSecurityEngine.CheckSetHelper(CompressedStack cs, PermissionSet grants, PermissionSet refused, PermissionSet demands, RuntimeMethodHandle rmh, Assembly asm, SecurityAction action)
at TravelFinder.WebServices.XmlTransformUtility.TraslateXml(XmlNode root, String xslPath, Object extension)
at TravelFinder.WebServices.XmlTransformUtility.ExecTransformation(String xmlContent, String xslPath) in C:\Users\didsal00\Documents\Visual Studio 2005\Projects\TravelFinder.WebServices\TravelFinder.WebServices\XmlTransformUtility.cs:line 159
at TravelFinder.WebServices.Offerte.GetOfferteByStrutturaId(Int32 strutturaID) in C:\Users\didsal00\Documents\Visual Studio 2005\Projects\TravelFinder.WebServices\TravelFinder.WebServices\Offerte.asmx.cs:line 45
</StackTrace>
<Message>Request failed.</Message>
</Error>
riga 159: string xmlOutput = XmlTransformUtility.TraslateXml(root, xslPath, new XslUtilityLista());
/// <summary>
/// Classe per la trasformazione di un file xml tramite un xsl
/// </summary>
/// <param name="root"> Nodo root del documento</param>
/// <param name="xslPath"> Path del file xsl</param>
/// <param name="extension"> Eventuale classe contenente le funzioni user utilizzate nel file xsl</param>
/// <returns></returns>
public static string TraslateXml(XmlNode root, string xslPath, object extension)
{
try
{
XsltArgumentList xsltArgument = new XsltArgumentList();
if (extension != null)
xsltArgument.AddExtensionObject("urn:utility", extension);
XslCompiledTransform objXslCompiledTransform = new XslCompiledTransform();
XsltSettings objXsltSettings = new XsltSettings(true, true);
objXslCompiledTransform.Load(xslPath, objXsltSettings, null);
StringWriter objStringWriter = new StringWriter();
XmlReader reader = new XmlNodeReader(root);
objXslCompiledTransform.Transform(reader, xsltArgument, new XmlTextWriter(objStringWriter));
objXslCompiledTransform.TemporaryFiles.Delete();
return objStringWriter.ToString();
}
catch (Exception ex)
{
string xmlErr = "<Error>";
xmlErr += "<StackTrace><![CDATA[";
xmlErr += ex.StackTrace;
xmlErr += "]]></StackTrace>";
xmlErr += "<Message><![CDATA[";
xmlErr += ex.Message;
xmlErr += "]]></Message>";
xmlErr += "</Error>";
return xmlErr;
}
}
classe per le user function usate nell'xsl
/// <summary>
/// Classe di supporto per la trasformazione xslt
/// </summary>
public class XslUtilityLista
{
public XslUtilityLista()
{
}
public bool[] GetDaySelected(int selected) {
int resto = selected;
int i = 6;
bool[] result = new bool[i+1];
while(resto > 0 && i >= 0) {
if(resto%2==0)
result[i--] = false;
else
result[i--] = true;
resto = resto / 2;
}
while(i >= 0)
result[i--] = false;
return result;
}
public string GetDatePartenza(string strDateParStart, string strDateParEnd, string strPeriodSelect) {
//RICAVO TUTTE LE DATE DI PARTENZA
DateTime dateToday = DateTime.Now;
DateTime datePartStart = new DateTime(Convert.ToInt32(strDateParStart.Substring(0, 4)), Convert.ToInt32(strDateParStart.Substring(4, 2)), Convert.ToInt32(strDateParStart.Substring(6, 2)));
DateTime datePartEnd = new DateTime(Convert.ToInt32(strDateParEnd.Substring(0, 4)), Convert.ToInt32(strDateParEnd.Substring(4, 2)), Convert.ToInt32(strDateParEnd.Substring(6, 2)));
int periodSelect = Convert.ToInt32(strPeriodSelect);
string datePar = "";
bool[] daySelected = GetDaySelected(periodSelect);
int dateDiff = datePartEnd.Subtract(datePartStart).Days;
for(int j = 0; j <= dateDiff; j++)
{
DateTime dateCurr = datePartStart.AddDays(Convert.ToDouble(j));
int day = ((int)dateCurr.DayOfWeek - 1);
if(day < 0)
day = 6;
if(daySelected[day] && dateCurr.CompareTo(dateToday) > 0) {
if(datePar != "")
datePar += "|";
datePar += dateCurr.ToString("yyyyMMdd");
}
}
return datePar;
}
}
file xsl:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:user="urn:utility">
<xsl:output method="xml" encoding="utf-8" indent="yes"/>
<xsl:template match="ListOfferte">
<xsl:element name="ListOfferte">
<xsl:for-each select="//Offerta">
<xsl:element name="Offerta">
<xsl:element name="OffertaID">
<xsl:value-of select="offertaID"></xsl:value-of>
</xsl:element>
<xsl:element name="TourOperatorID">
<xsl:value-of select="tourOperatorID"></xsl:value-of>
</xsl:element>
<xsl:element name="StrutturaID">
<xsl:value-of select="tourOperatorID"></xsl:value-of>
</xsl:element>
<xsl:element name="Classificazione">
<xsl:value-of select="classificazione"></xsl:value-of>
</xsl:element>
<xsl:element name="Tipologia">
<xsl:value-of select="tipologia"></xsl:value-of>
</xsl:element>
<xsl:element name="Trattamento">
<xsl:value-of select="trattamento"></xsl:value-of>
</xsl:element>
<xsl:element name="Descrizione">
<xsl:value-of select="descrizione"></xsl:value-of>
</xsl:element>
<xsl:element name="Giorni">
<xsl:value-of select="giorni"></xsl:value-of>
</xsl:element>
<xsl:element name="Notti">
<xsl:value-of select="notti"></xsl:value-of>
</xsl:element>
<xsl:element name="DatePartenza">
<xsl:call-template name="datePart-tokens">
<xsl:with-param name="datePart">
<xsl:value-of select="concat(user:GetDatePartenza(concat(dataParStart,''), concat(dataParEnd,''), concat(periodSelect,'')), '|')" />
</xsl:with-param>
</xsl:call-template>
</xsl:element>
<xsl:element name="LuoghiPartenza">
<xsl:call-template name="luoghiPart-tokens">
<xsl:with-param name="luoghi">
<xsl:value-of select="concat(luogoPar, '|')" />
</xsl:with-param>
</xsl:call-template>
</xsl:element>
<xsl:element name="Notti">
<xsl:value-of select="notti"></xsl:value-of>
</xsl:element>
<xsl:element name="PrezzoCatalogo">
<xsl:value-of select="prezzoCatalogo"></xsl:value-of>
</xsl:element>
<xsl:element name="Prezzo">
<xsl:value-of select="prezzo"></xsl:value-of>
</xsl:element>
<xsl:element name="DataPubblicazione">
<xsl:value-of select="data"></xsl:value-of>
</xsl:element>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:template>
<xsl:template name="luoghiPart-tokens">
<xsl:param name="luoghi" />
<xsl:variable name="first" select="substring-before($luoghi, '|')" />
<xsl:variable name="remaining" select="substring-after($luoghi, '|')" />
<xsl:element name="Luogo">
<xsl:value-of select="$first" />
</xsl:element>
<xsl:if test="$remaining">
<xsl:call-template name="luoghiPart-tokens">
<xsl:with-param name="luoghi" select="$remaining" />
</xsl:call-template>
</xsl:if>
</xsl:template>
<xsl:template name="datePart-tokens">
<xsl:param name="datePart" />
<xsl:variable name="first" select="substring-before($datePart, '|')" />
<xsl:variable name="remaining" select="substring-after($datePart, '|')" />
<xsl:element name="Data">
<xsl:value-of select="$first" />
</xsl:element>
<xsl:if test="$remaining">
<xsl:call-template name="datePart-tokens">
<xsl:with-param name="datePart" select="$remaining" />
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>