Использование XSLT для вывода нескольких файлов - PullRequest
1 голос
/ 14 июля 2009

Я пытаюсь получить пример использования XSLT 2.0 для вывода нескольких файлов.

Используя Saxon B 9.7.0.1 с Java 1.6, я получаю эту ошибку:

C:\Documents and Settings\Administrator\Desktop\saxon>java -jar saxon9.jar -s:input.xml -xsl:transform.xml
Error on line 15 of transform.xml:
  java.net.URISyntaxException: Illegal character in path at index 20: file:///C:/Documents
  and Settings/Administrator/Desktop/saxon/output1/test1.html
  at xsl:for-each (file:/C:/Documents%20and%20Settings/Administrator/Desktop/saxon/transform.xml#10)
     processing /tests/testrun[1]
Transformation failed: Run-time errors were reported

Input.xml

<?xml version="1.0" encoding="UTF-8"?>
<tests>
    <testrun run="test1">
        <test name="foo" pass="true" />
        <test name="bar" pass="true" />
        <test name="baz" pass="true" />
    </testrun>
    <testrun run="test2">
        <test name="foo" pass="true" />
        <test name="bar" pass="false" />
        <test name="baz" pass="false" />
    </testrun>
    <testrun run="test3">
        <test name="foo" pass="false" />
        <test name="bar" pass="true" />
        <test name="baz" pass="false" />
    </testrun>
</tests>

transform.xml

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
  version="2.0">

  <xsl:output method="text"/>
  <xsl:output method="html" indent="yes" name="html"/>

  <xsl:template match="/">
    <xsl:for-each select="//testrun">
      <xsl:variable name="filename"
        select="concat('output1/',@run,'.html')" />
      <xsl:value-of select="$filename" />  <!-- Creating  -->
      <xsl:result-document href="{$filename}" format="html">
        <html><body>
          <xsl:value-of select="@run"/>
        </body></html>
      </xsl:result-document>
    </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>

Ответы [ 2 ]

1 голос
/ 10 ноября 2015

У меня была такая же проблема с saxon -o: outputfile, заменив пробелы на% 20 ..

обнаружил, что проблема в саксонской и Java-версиях.

Linux JAVA 1.7.0_45: Саксон создает% 20 Unix JAVA 1.5.0_61: SAXON создает% 20 Unix JAVA 1.4.2_22: SAXON не создает каталог% 20

1 голос
/ 14 июля 2009

Символ 20 в вашем URI - это первый пробел в «Документах и ​​настройках». В качестве быстрого решения попробуйте переместить файлы в путь без пробелов. (Скажите, «C: \ test» или что-то подобное.) Я подозреваю, что долгосрочное исправление состоит в том, чтобы изменить ваш XSLT для кодирования пробелов на %20 до подачи $filename на xsl:result-document, но я боюсь, что мой XSLT -2.0-фу недостаточно силен, чтобы сказать тебе как.

Редактировать: Я не проверял это, так как у меня нет удобного процессора XSLT 2.0, но после просмотра документов, похоже, вы хотите кодировать для URI функция. Вам может подойти что-то вроде следующего:

<xsl:result-document href="{fn:encode-for-uri($filename)}" format="html">
...