в XSL удалить путь из имени файла в переменной - PullRequest
0 голосов
/ 14 октября 2018

Я работаю в Oxygen и использую Saxon.

Я ищу кучу файлов xml в поисках имен jpg.Я создаю переменные следующим образом:

<xsl:variable name="allxml" 
select="collection('..//xml/?select=*.xml;recurse=yes')"/>
<xsl:variable name="jpgs" select="$allxml//element/@n"/>

$ jpgs выглядит так:

dir1 / jpg001.jpg dir1 / jpg002.jpg dir1 / jpg003.jpg

и т. Д..

Я хочу убрать информацию о режиссере, но мне трудно.Я пытался использовать tokenize() и substring-after(), но оба возвращают похожие ошибки.

"Последовательность из более чем одного элемента не допускается в качестве первого аргумента функции fn: tokenize () ("dir1 / jpg001.jpg", "dir1 / jpg002.jpg" "dir1 / jpg003.jpg"). "

Потому что я не знаю, что делаю, я не знаюзнаю, что я делаю не такМожет кто-нибудь помочь мне разобраться?

1 Ответ

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

Вы не показывали свой код, но из сообщения об ошибке звучит, как будто вы пытаетесь применить tokenize($jpgs).

В сообщении об ошибке говорится, что первый параметр для tokenize() должен быть одной строкой, но вы задаете ему последовательность строк.

Необходимо применить tokenize()для каждого элемента в последовательности $jpgs значений.

Вы можете использовать xsl:for-each для итерации по элементам в последовательности:

<xsl:for-each select="$jpgs">
  <xsl:sequence select="tokenize(., '/')[last()] "/>
</xsl:for-each>

или вы можете использовать для выражения:

<xsl:sequence select="for $path in $jpgs return tokenize($path, '/')[last()] "/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...