Сбой XslCompiledTransform при xsl:import

У меня есть несколько файлов XSLT, индексная таблица стилей импортирует макет с помощью xsl: import. VS говорит, что XSLT действителен, но операция загрузки вызывает исключение компиляции xslt, говорит, что не может импортировать мой файл макета. Он пытается найти его в c:\windows\system32 вместо каталога моего проекта.

Индекс.xsl:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt"
    xmlns:h ="urn:helper"
    exclude-result-prefixes="msxsl"
>
    <xsl:import href="..\Shared\Layout.xsl"/>

    <xsl:template match="/content" mode="content">
        <p>Hello world</p>
    </xsl:template>

</xsl:stylesheet>

и Layout.xsl:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
    <xsl:output method="html" encoding="utf-8" indent="yes" />

    <xsl:template match="/xml">
        <html>
            <head>
                <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
            </head>
            <body>
                <xsl:apply-templates select="/xml" mode="content" />
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>

Затем я пытаюсь применить преобразование к своему XML:

string viewPath = "~/Views/Home/Index.xsl";
var stylesheet = HostingEnvironment.VirtualPathProvider.GetFile(viewPath);
var xsl = new XslCompiledTransform();
using (var stream = stylesheet.Open())
using (var tmpl = XmlReader.Create(stream))
{
    xsl.Load(tmpl, null, new XmlUrlResolver());
}

person Anton Egorov    schedule 25.04.2011    source источник
comment
Обратная косая черта не является допустимым разделителем путей в URI. Попробуйте косую черту. Я сомневаюсь, что это что-то изменит — программное обеспечение Microsoft склонно прощать эту ошибку, — но оно устранит одну возможную причину и сделает ваш код более переносимым.   -  person Michael Kay    schedule 25.04.2011


Ответы (1)


Это ASP.NET? Затем используйте

  xsl.Load(MapPath(viewPath), null, new XmlUrlResolver());
person Martin Honnen    schedule 25.04.2011