передача саксонского каталога в качестве параметра командной строки в таблицу стилей XSLT 2.0 - PullRequest
0 голосов
/ 27 апреля 2020

Используя Saxon9he, я хотел бы передать каталог входного файла в мою таблицу стилей XSLT. Я определил параметр в своей таблице стилей:

<xsl:param name="publishing.folder" />

и в командной строке:

+publishing.folder="%~dp1\"

С + параметр пуст.

Без +,

publishing.folder="%~dp1\" 

Я получаю: Error in xsl:result-document/@href Resolved URL is malformed: unknown protocol: d

d может быть буквой диска, где находится входной файл.

Вот код с @href, вызывающим ошибку:

    <xsl:template match="/">
      <xsl:call-template name="write-dataset-file">
            <xsl:with-param name="filename" select="concat($publishing.folder,'-dataset.xml')"/>
      </xsl:call-template>
    </xsl:template>

   <xsl:template name="write-dataset-file">
      <xsl:param name="filename"/>

      <xsl:result-document href="{$filename}" omit-xml-declaration="false" method="xml" indent="yes">
         <Dataset>

         </Dataset>
      </xsl:result-document>
  </xsl:template>

xalan принимает параметр командной строки -PARAM publishing.folder "%~dp1\", но я бы не стал go возвращаться к XSLT 1.0

1 Ответ

1 голос
/ 28 апреля 2020

Атрибут href xsl: result-document должен быть URI, но вы создаете имя файла. Хотя многие XML связанные программные пакеты принимают имена файлов, где стандарты требуют URI, Saxon имеет тенденцию быть более строгим. Самый простой способ исправить это - добавить «file: ///» в начале имени файла, хотя этого может быть недостаточно, если имя файла содержит специальные символы, такие как «#».

...