Я хочу обрабатывать все XML-файлы в каталоге, генерируя имена выходных файлов на основе значения в каждом XML. Я использую функцию коллекции Saxon в сочетании с функцией base-uri, но мне трудно получить доступ к каждому URI в отдельности.Использование XSLT base-uri с функцией коллекции Saxon
Изменить: ниже таблица стилей выдает сообщение об ошибке: «Последовательность более одного элемента не допускается в качестве первого аргумента базы-URI()»
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" />
<xsl:param name="input-dir" select="'file:///C:/path/to/directory'"/>
<xsl:template name="main">
<xsl:variable name="input-docs" select="collection(iri-to-uri(concat($input-dir, '?select=*.xml')))"/>
<xsl:variable name="old-filename" select="base-uri($input-docs)"/>
<xsl:variable name="new-filename" select="item[@name = 'LogNo']/text"/>
<xsl:for-each select="$old-filename">
<xsl:result-document href="concat ($new-filename, '.xml')">
<xsl:copy-of select="."/>
</xsl:result-document>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Edit: для полноты картины, I» Вы добавили две подсказки командной строки, которые я попытался. Я не уверен, что путь к входному каталогу должен быть указан в таблице стилей или в командной строке.
java -jar "C:\path\to\saxon.jar" -it:main -o:"C:\path\to\renamed\XML" -xsl:"C:\path\to\stylesheet.xslt"
java -jar "C:\path\to\saxon.jar" -s:"C:\path\to\input\XML" -o:"C:\path\to\renamed\XML" -xsl:"C:\path\to\stylesheet.xslt"
Выполняется ли эта работа, когда вы помещаете «concat ($ new-filename,« .xml ») в' {} '? – uL1
Боюсь, я не следую ... куда бы влезли фигурные скобки? – b00kgrrl
uL1 предлагает использовать AVT (https://www.w3.org/TR/xslt#attribute-value-templates), чтобы он выглядел как 'href =" {concat ($ new-filename, '.xml')} "'. Однако контекст вашего 'for-each' будет строкой (' $ old-filename'); возможно, вы хотите вместо этого выбрать '$ input-docs'? –