2010-05-21 20 views
11

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:

The error I get when I step into the stylesheet http://img339.imageshack.us/img339/4153/scrxslterror.jpg

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

Antwort

2

Ich bin über die Nutzung von Nebenstellen-Objekten nicht sicher, aber als ich mit Debuggen von XSLT-Transformation in Code in VS2010 Ihr Problem verstehen. Hier ist die Funktion, die wir zu debuggen XSLT-Transformation verwenden:

public string ApplyTransformation(string inputFilePath, string xsltFileContent) 
    { 
     XslCompiledTransform transform = new XslCompiledTransform(debugEnabled); 

     File.WriteAllText(xsltTempFilePath,xsltFileContent); 
     transform.Load(xsltTempFilePath, XsltSettings.TrustedXslt, new XmlUrlResolver()); 

     XmlReader reader = XmlReader.Create(inputFilePath); 
     StringWriter output = new StringWriter(); 
     XmlWriter writer = XmlWriter.Create(output,transform.OutputSettings); 
     transform.Transform(reader,writer); 
     return output.ToString(); 
    } 

Leider gibt es eine bug mit VS2010 XSLT-Debugger, die Ihre Debugging-Erfahrung schlechter als in VS2008 machen.

+0

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. –

+0

Ich habe es gerade mit VS 2008 SP1 getestet. Es klappt. – mfilimonov

0

Betrachten Sie das Debuggen mit XML Spy XSLT Debugger. Es funktioniert für mich die ganze Zeit.

+0

Nach einem kurzen Blick konnte ich nichts in Bezug auf Erweiterungsobjekte finden. Unterstützt es sie? –

Verwandte Themen