0

我正在尝试通过在谓词中使用另一个序列来过滤序列:

这是我的xpath:

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

这里的xml文件:

文件.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
4

1 回答 1

0

那里的情况可能正在发生变化。所以我尝试使用一个变量,它似乎正在工作。

<?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>
于 2013-07-05T17:35:08.860 回答