У меня есть два xml
файла и преобразование xsl
для них:
items.xml
<items>
<item id="1">
<name>Item1</name>
</item>
<item id="2">
<name>Item2</name>
</item>
</items>
details.xml
<details>
<item id="1">
<details>Item1 details</details>
</item>
</details>
merge.xsl
:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="xml"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/items">
<items>
<xsl:for-each select="item">
<item>
<xsl:variable name="item-id" select="@id"/>
<name>
<xsl:value-of select="name/text()"/>
</name>
<xsl:if test="document('details.xml')/details/item[@id=$item-id]">
<details>
<xsl:value-of select="document('details.xml')/details/item[@id=$item-id]/details/text()"/>
</details>
</xsl:if>
</item>
</xsl:for-each>
</items>
</xsl:template>
</xsl:stylesheet>
merge.xml
используется по абсолютному пути, а xml
- по относительному пути.
Для их преобразования я использую саксонскую банку:
java -jar /jars/saxon.jar -s:items.xml -xsl:/xsl/merge.xsl
но он показывает предупреждение и не может найти details.xml
по относительному пути (document('details.xml')
в merge.xsl
):
Предупреждение для символа 9 в xsl: if / @ test в строке 13 столбца 77 файла merge.xsl:
FODC0002: ошибка ввода-вывода при обработке синтаксического анализатора XML
Файл: /xsl/details.xml:
/xsl/details.xml (нет такого файла или каталога)
Если я помещу merge.xsl
в один каталог, он будет работать нормально и объединит оба xml
файла, как и ожидалось, но это невозможно сделать каждый раз вручную.
Можно ли настроить преобразователь Saxon для поиска xml
файлов из document('file.xml')
в том же каталоге, в котором находятся эти документы, а не в каталоге xsl
?