Как я проверяю на существование внешнего файла с XSL?

Я нашел много примеров, что ссылочный Java и C для этого, но как делают меня, или может я, проверить на существование внешнего файла с XSL.

Во-первых, я понимаю, что это - только отрывок, но это - часть огромной таблицы стилей, таким образом, я надеюсь, что достаточно показать мою проблему.

    <!-- Use this template for Received SMSs -->
<xsl:template name="ReceivedSMS">
    <!-- Set/Declare "SMSname" variable (local, evaluates per instance) -->
    <xsl:variable name="SMSname">
        <xsl:value-of select=" following-sibling::Name"/>
    </xsl:variable>
    <fo:table font-family="Arial Unicode MS" font-size="8pt" text-align="start">
        <fo:table-column column-width=".75in"/>
        <fo:table-column column-width="6.75in"/>
        <fo:table-body>
            <fo:table-row>
                <!-- Cell contains "speakers" icon -->
                <fo:table-cell display-align="after">
                    <fo:block text-align="start">
                        <fo:external-graphic src="../images/{$SMSname}.jpg" content-height="0.6in"/>

То, что я хотел бы сделать, вставляется "если" оператор, surronding {$SMSname}.jpg строка. Это:

                     <fo:block text-align="start">
                        <xsl:if test="exists( the external file {$SMSname}.jpg)">
                            <fo:external-graphic src="../images/{$SMSname}.jpg" content-height="0.6in"/>                            
                        </xsl:if>
                        <xsl:if test="not(exists( the external file {$SMSname}.jpg))">
                            <fo:external-graphic src="../images/unknown.jpg" content-height="0.6in"/>                            
                        </xsl:if>
                    </fo:block>                       

Из-за "группировки", и т.д., я использую XSLT 2.0. Я надеюсь, что это - что-то, что может быть сделано. Я надеюсь еще больше, что это - что-то простое.

Как всегда, заранее спасибо за любую справку. LO

14
задан LOlliffe 26 May 2010 в 23:54
поделиться

3 ответа

Нет, это невозможно сделать с помощью XSLT 2.0/XPath 2.0.

Функция XSLT 2.0 unparsed-text-available() подходит только для поиска текстовых файлов, и даже если текстовый файл с указанным URI существует, эта функция может вернуть false(), поскольку она также должна прочитать содержимое файла и проверить, что он содержит только разрешенные символы.

Из spec:

"Функция unparsed-text-available определяет, вернет ли вызов функции unparsed-text с идентичными аргументами строку.

Если первый аргумент - пустая последовательность, функция возвращает false. Если второй аргумент - пустая последовательность, функция ведет себя так, как если бы второй аргумент был опущен.

В других случаях функция возвращает true, если вызов функции unparsed-text с теми же аргументами был бы успешным, и false, если вызов функции unparsed-text с теми же аргументами был бы неудачным с неустранимой динамической ошибкой.

Примечание:

Это требует, чтобы функция unparsed-text-available действительно пыталась прочитать ресурс, идентифицированный URI, и проверить, что он правильно закодирован и не содержит символов, недопустимых в XML. "

Конец цитаты.

9
ответ дан 1 December 2019 в 10:18
поделиться

Предложенная спецификация File Module EXPath будет поддерживать функции файловой системы, такие как эта (file:exists() в спецификации), как стандартные функции расширения XPath. Реализации XSLT для этого пока нет, но за этим стоит понаблюдать.

2
ответ дан 1 December 2019 в 10:18
поделиться

EDIT: Используйте функцию unparsed-text-available. Она является частью xslt 2.0, но не XQuery или отдельного XPath.

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

Я не верю, что есть способ сделать это в XSLT с помощью стандартных функций. Вы можете сделать это с помощью функций расширения, как описано здесь, для java.

Есть функция unparsed-text-available, но я не уверен, что это стандартная функция. Есть пример ее использования в Zvon. Функция unparsed-text-available упоминается здесь как часть xslt 2.0, и поддерживается в Saxon.

2
ответ дан 1 December 2019 в 10:18
поделиться
Другие вопросы по тегам:

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