Ich arbeite derzeit an einem Projekt, das eine Menge XSLT-Transformationen enthält und ich wirklich brauche einen Debugger (ich habe XSLTs, die mehr als 1000 Zeilen lang sind und ich nicht schreibe Ihnen :-).Debuggen von XSLT mit Erweiterungsobjekten in Visual Studio 2010
Das Projekt ist in C# geschrieben und macht Gebrauch von Erweiterungsobjekten:
xslArg.AddExtensionObject("urn:<obj>", new <Obj>());
Aus meinem Wissen in dieser Situation Visual Studio ist das einzige Werkzeug, das mir die Transformationen Schritt-für-Schritt Debuggen helfen kann. Der statische Debugger ist aufgrund der Erweiterungsobjekte nicht verwendbar (er löst einen Fehler aus, wenn Elemente erreicht werden, die auf ihren Namespace verweisen). Glücklicherweise habe ich this thread gefunden, was mir einen Ausgangspunkt gab (zumindest weiß ich, dass es getan werden kann).
Nach der Suche in MSDN fand ich die Kriterien, die das Einstieg in die Transformation möglich machen. Sie sind aufgeführt here. Kurz: (. XmlReader
& co)
- die XML und XSLT muss über eine Klasse geladen werden, die die
IXmlLineInfo
Schnittstelle - die XML-Resolver im
XSLTCompiledTransform
Konstruktor verwendet wird, ist die dateibasierte (XmlUriResolver
sollte funktionieren). - das Stylesheet auf dem lokalen Rechner oder im Intranet (?)
Von dem, was ich sagen kann, soll ich all diese Kriterien passen, aber es funktioniert immer noch nicht. Die relevanten Codebeispiele sind unter:
// [...]
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);
Ich verstehe wirklich nicht, was ich falsch mache. Ich habe die Schnittstellen auf beiden XmlReader
Objekte überprüft und sie implementieren die erforderliche. Außerdem erbt BaseUriXmlResolver
von XmlUriResolver
und das Stylesheet wird lokal gespeichert. Der Screenshot unten ist was ich bekomme, wenn ich in die Transform
Funktion gehe. Zuerst kann ich den Stylesheet-Code sehe nach (auf Vorlage-Spiel) durch den Parameter Schreiten ich diese:
Wenn jemand eine Idee hat, warum es nicht funktioniert oder hat eine alternative Art und Weise des Erhaltens es zu arbeiten, wäre ich sehr verpflichtet :).
Danke,
Alex
In Bezug auf den Fehler: Hat dies mit VS 2008 funktioniert? Ich habe es nur mit dem Laden der XSLT aus einer Datei auf der CD arbeiten lassen. –
Ich habe es gerade mit VS 2008 SP1 getestet. Es klappt. – mfilimonov