Отладка XSLT с дополнительными объектами в Visual Studio 2010

Я в настоящее время работаю над проектом, который включает много преобразований XSLT, и мне действительно нужен отладчик (у меня есть XSLTs, которые являются 1000 + строки долго, и я не записал им :-).

Проект записан в C# и использует дополнительные объекты:

xslArg.AddExtensionObject("urn:", new ());

От моего знания, в этой Visual Studio ситуации единственный инструмент, который может помочь мне отладить пошаговые преобразования. Статический отладчик бесполезен из-за дополнительных объектов (он бросает ошибку, когда он достигает элементов, которые ссылаются на их пространство имен). К счастью, я нашел этот поток, который дал мне начальную точку (по крайней мере, я знаю, что он может быть сделан).

После поиска MSDN я нашел критерии, который превращает продвижение в возможное преобразование. Они перечислены здесь. Короче говоря:

  • XML и XSLT должны быть загружены через класс, который имеет IXmlLineInfo интерфейс (XmlReader И co.)
  • сопоставитель XML, используемый в XSLTCompiledTransform конструктор основан на файле (XmlUriResolver должен работать).
  • таблица стилей должна быть на локальной машине или на интранет (?)

Из того, что я могу сказать, я соответствую всем этим критериям, но это все еще не работает. Образцы соответствующих норм отправляются ниже:

// [...]

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);

Я действительно не получаю то, что я делаю неправильно. Я проверил интерфейсы на обоих XmlReader объекты и они реализуют необходимого. Кроме того, BaseUriXmlResolver наследовался XmlUriResolver и таблица стилей хранится локально. Снимок экрана ниже - то, что я получаю при продвижении в Transform функция. Сначала я вижу код таблицы стилей после продвижения через параметры (на шаблонном соответствии), я получаю это:

The error I get when I step into the stylesheet

Если у кого-либо есть какая-либо идея, почему она не работает или имеет альтернативный способ заставить это работать, я был бы очень обязан :).

Спасибо,
Alex

11
задан Glorfindel 27 July 2019 в 05:33
поделиться

2 ответа

Я не уверен в использовании объектов расширения, но, как я понимаю, ваша проблема связана с отладкой XSLT-преобразования в коде в VS2010. Вот функция, которую мы используем для отладки XSLT-преобразования:

 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();
    }

К сожалению, есть ошибка в отладчике XSLT в VS2010, которая сделает ваш опыт отладки хуже, чем в VS2008.

2
ответ дан 3 December 2019 в 12:17
поделиться

Рассмотрите возможность отладки с помощью отладчика XML Spy XSLT. У меня это работает постоянно.

0
ответ дан 3 December 2019 в 12:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: