Je travaille actuellement sur un projet qui implique beaucoup de transformations XSLT et je vraiment besoin d'un débogueur (je XSLT qui sont plus de 1000 lignes à long et je ne écrivez-les :-).Debugging XSLT avec des objets d'extension dans Visual Studio 2010
Le projet est écrit en C# et utilise des objets d'extension:
xslArg.AddExtensionObject("urn:<obj>", new <Obj>());
De ma connaissance, dans cette situation Visual Studio est le seul outil qui peut me aider à résoudre les transformations étape par étape. Le débogueur statique ne sert à rien à cause des objets d'extension (il lance une erreur lorsqu'il atteint des éléments qui référencent leur espace de noms). Heureusement, j'ai trouvé this thread qui m'a donné un point de départ (au moins je sais que cela peut être fait). Après avoir recherché MSDN, j'ai trouvé les critères qui rendent possible le passage dans la transformation.
Ils sont répertoriés here. En bref: (. XmlReader
& co)
- le XML et XSLT doit être chargé par une classe qui a l'interface
IXmlLineInfo
- le résolveur XML utilisé dans le constructeur
XSLTCompiledTransform
est basé sur des fichiers (XmlUriResolver
devrait fonctionner). - la feuille de style devrait être sur la machine locale ou sur l'intranet (?)
D'après ce que je peux dire, je forme tous ces critères, mais il ne fonctionne toujours pas. Les exemples de code pertinents sont affichés ci-dessous:
// [...]
xslTransform = new XslCompiledTransform(true);
xslTransform.Load(XmlReader.Create(new StringReader(contents)), null, new BaseUriXmlResolver(xslLocalPath));
// [...]
// I already had the xml loaded in an xmlDocument
// so I have to convert to an XmlReader
XmlTextReader r = new XmlTextReader(new StringReader(xmlDoc.OuterXml));
XsltArgumentList xslArg = new XsltArgumentList();
xslArg.AddExtensionObject("urn:[...]", new [...]());
xslTransform.Transform(r, xslArg, context.Response.Output);
Je ne comprends vraiment pas ce que je fais de mal. J'ai vérifié les interfaces sur les objets XmlReader
et ils implémentent le requis. En outre, BaseUriXmlResolver
hérite de XmlUriResolver
et la feuille de style est stockée localement. La capture d'écran ci-dessous est ce que je reçois en entrant dans la fonction Transform
. D'abord, je peux voir le code stylesheet après avoir quitté les paramètres (sur le modèle match), je reçois ceci:
Si quelqu'un a une idée pourquoi il ne fonctionne pas ou a une autre façon d'obtenir pour travailler je serais très obligé :).
Merci,
Alex
Concernant le bug: Cela a-t-il fonctionné avec VS 2008? Je ne faisais que travailler avec le XSLT chargé à partir d'un fichier sur le disque. –
Je viens de le tester avec VS 2008 SP1. Ça marche. – mfilimonov