#c# #.net #uri #xslt #xslcompiledtransform
#c# #.net #uri #xslt #xslcompiledtransform
Вопрос:
У меня есть несколько файлов XSLT, таблица стилей индекса импортирует макет с помощью xsl: import. VS сообщает, что XSLT допустим, но операция загрузки вызывает исключение компиляции xslt, в нем говорится, что не удается импортировать мой файл макета. Он пытается найти его в c:windowssystem32 вместо моего каталога проекта.
Index.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="..SharedLayout.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());
}
Комментарии:
1. Обратная косая черта не является допустимым разделителем путей в URI. Попробуйте использовать косую черту вперед. Я сомневаюсь, что это что-то изменит — программное обеспечение Microsoft, как правило, прощает эту ошибку, — но это устранит одну возможную причину и сделает ваш код более переносимым.
Ответ №1:
Это ASP.NET ? Затем используйте
xsl.Load(MapPath(viewPath), null, new XmlUrlResolver());