использование функции document () в .NET XSLT приводит к ошибке - PullRequest
3 голосов
/ 26 апреля 2010

Я хотел бы использовать встроенные ресурсы в моем XSLT-файле, но при вызове 'document (...)' C # жалуется, что "Ошибка при загрузке документа ..."

Я хотел бы использовать определенные ресурсы в XSLT-файле и получить их следующим образом: "document ('') / / my: resources / " ...

Как я могу это сделать?

ex xsl:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:my="xslt-gruper-v1.2.xsl" exclude-result-prefixes="my">

     <my:resources>
      <one>tryb</one>
     </my:resources>

     <xsl:variable name="res" select="document('')/*/my:resources/("/>
</xsl:stylesheet>

Как я могу получить доступ к такой структуре без исключений в C #? Я добавлю это во время статического преобразования через ex. Опера все отлично работает.

1 Ответ

10 голосов
/ 26 апреля 2010
<xsl:variable name="res" select="document('')/*/my:resources/("/>

Значение атрибута select не является синтаксически правильным выражением XPath . Каждый совместимый XSLT-процессор должен выдавать ошибку.

Решение

Исправьте вышеприведенное в:

<xsl:variable name="vRes" select="document('')/*/my:resources"/>

Если все еще возникает исключение, прочитайте о XsltSettings классе.

Затем создайте экземпляр XsltSettings с помощью этого конструктора , например:

XsltSettings(true, false)

Не включать сценарии - оставить второй аргумент конструктора как false.

Ниже приведен более полный фрагмент кода :

// Create the XsltSettings object with document() enabled and script disabled.
XsltSettings settings = new XsltSettings(true,false);

// Create the XslCompiledTransform object and load the style sheet.
XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load("sort.xsl", settings, new XmlUrlResolver());

Обновление : Другая возможная причина ошибки - динамическое создание таблицы стилей XSLT (не из файла). В этом случае XSLT-процессор обычно не может разрешить относительный URI в document('').

В этом последнем случае решение состоит в том, чтобы сделать требуемый элемент содержимым xsl:variable и использовать функцию расширения xxx:node-set() для обращения к этому элементу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...