xslt / saxon - использование key () с collection (): содержимое не разрешено в прологе? - PullRequest
0 голосов
/ 22 октября 2018

У меня есть коллекция документов tei-xml на file:///Users/username/foopath.Мне нужно получить доступ к этим документам из преобразования XSLT 2.0 для ключа.

У меня есть ключ, который должен искать совпадения в этих документах в //tei:seg[@type='dep_event']/@corresp

Итак, я объявляю переменную дляколлекция документов:

 <xsl:variable name="coll" 
    select="collection('file:///Users/username/foopath')"/>

И ключ:

<xsl:key name="correspidkey" 
     match="tei:seg[@type='dep_event' and @corresp]" 
     use="@corresp"></xsl:key>

Затем я развертываю ключ для коллекции следующим образом (который отклоняет любые нежелательные возвраты из self::):

  <xsl:variable name="correspvar" 
     select="self::seg[@type='dep_event' and @corresp]/@corresp"/>

  <xsl:value-of select="$coll/(key('correspidkey',$correspvar) 
            except $correspvar)/upper-case(@id)" 
            separator=", "/>
            </xsl:element>
        </xsl:when> 

Saxon HE 9.6.07 возвращает Content is not allowed in prolog, но я не могу определить, что именно указывает эта ошибка.Если я удаляю эту строку, ошибка проходит, и файл обрабатывается нормально.Возможно, мое использование collection() с ключом?

Большое спасибо.

1 Ответ

0 голосов
/ 22 октября 2018

Ошибка в том, что ваш звонок на collection() выбрал файлы, которые не являются правильно сформированными XML.Вы можете отфильтровать не-XML файлы либо (а) с помощью ;select=*.xml в URI коллекции, либо (б) с помощью ;on-error=ignore.

...