У меня есть загрузка XSLT от третьей стороны, которую мне нужно использовать для преобразования некоторых данных.
Если я использую xsltproc, он работает нормально и выводит данные, как и ожидалось.
У меня естьследующий код C #, чтобы попытаться использовать его в процессе:
sXML - это кусок XML oJob.ContentTemplate - путь к локальному файлу к файлу XSLT
try
{
using (StringWriter oOutputString = new StringWriter())
{
using (XmlTextWriter oOutputWriter = new XmlTextWriter(oOutputString))
{
using (StringReader oInputString = new StringReader(sXML))
{
using (XmlTextReader oInputReader = new XmlTextReader(oInputString))
{
XslCompiledTransform oXSLTTransform = new XslCompiledTransform();
oXSLTTransform.Load(oJob.ContentTemplate, XsltSettings.TrustedXslt, new XmlUrlResolver());
oXSLTTransform.Transform(oInputReader, oOutputWriter);
String sHTML = oOutputWriter.ToString();
}
}
}
}
}
catch (Exception e)
{}
Выдается исключение:
Дополнительная информация: Не удается найти скрипт или внешний объект, который реализует префикс 'http://dlxs.org'.
XSLT довольно сложен, и я не понимаю большинство его в настоящее время.Есть ли способ заставить это работать, не углубляясь в XSLT?
Visual Studio 2010 должна поддерживать EXSLT, верно?
Редактировать: если я включу отладку и войду в нее, я могу видетьошибка в строке:
<xsl:import href="../../lib/xslfunctions.xsl"/>
......
<xsl:when test="contains($BibRegions, dlxs:normAttr($searchRgn))">
Эти функции должны быть включены уже, один из локальных файлов XSLT содержит это:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:str="http://exslt.org/strings" xmlns:exsl="http://exslt.org/common" xmlns:func="http://exslt.org/functions" xmlns:dlxs="http://dlxs.org" extension-element-prefixes="str exsl dlxs func" exclude-result-prefixes="str exsl dlxs func">
<!-- extension functions -->
<func:function name="dlxs:normAttr">
<xsl:param name="attr"/>
<!-- strip out spaces,commas,question marks -->
<xsl:variable name="temp" select="translate($attr,' ,?','')"/>
<func:result select="translate($temp,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')"/>
</func:function>
.....
</xsl:stylesheet>
Может ли Visual Studio открыть этифайлы, потому что они используют пути UNIX или потому что он не может открывать локальные файлы из-за проблем безопасности?
Редактировать 2:
Используемые мной расширения:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:str="http://exslt.org/strings"
xmlns:exsl="http://exslt.org/common"
xmlns:func="http://exslt.org/functions"
xmlns:dlxs="http://dlxs.org"
extension-element-prefixes="str exsl dlxs func"
exclude-result-prefixes="str exsl dlxs func">
Я очень начинающий XSLT, поэтому не уверен, что вам нужно.