xpath 2.0: последовательность фильтров с использованием другой последовательности

Вопрос:

Я пытаюсь отфильтровать последовательность, используя другую последовательность в предикате:

Вот мой xpath:

doc('files.xml')/files/file[path = //reference]

здесь xml файлы:

files.xml

<?xml version="1.0" encoding="UTF-8"?>
<files>
<file>
<path>d0002/000000338179.pdf</path>
<file>
<path>d0002/000000338179.JPG</path>
</file>
</file>
<file>
<path>d0002/000000341922.pdf</path>
</file>
<file>
<path>d0002/000000342768.pdf</path>
</file>
</files>

Рекомендации

<?xml version="1.0" encoding="UTF-8"?>
<references>
<reference>d0002/000000338179.pdf</reference>
<reference>d0002/000000341922.pdf</reference>
</references>

Я не могу заставить его работать, любой намек приветствуется. Vlax

РЕДАКТИРОВАТЬ

основанный на ответе от @Jirka, я пришел к «чистому» выражению XPath:

for $file in doc('files.xml')/files/file,
$ref in //reference
return $file[path = $ref]/path

Лучший ответ:

Вероятно, там меняется контекст. Поэтому я попытался использовать переменную и, похоже, работает.

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions">
    <xsl:output method="xml" indent="yes" />

    <xsl:variable name="refs" select="//reference" />
    <xsl:variable name="files" select="doc('files.xml')/files/file[path = $refs]" />

    <xsl:template match="/">
        <files>
            <xsl:copy-of select="$files" />     
        </files>
    </xsl:template>

</xsl:stylesheet>

Этот xslt дает результат

<?xml version="1.0" encoding="UTF-8"?>
<files xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <file>
        <path>d0002/000000338179.pdf</path>
        <file>
            <path>d0002/000000338179.JPG</path>
        </file>
    </file>
    <file>
        <path>d0002/000000341922.pdf</path>
    </file>
</files>

Оцените статью
TechArks.Ru
Добавить комментарий