我正在尝试使用谓词中的另一个序列来过滤序列:
这是我的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>
我无法让它工作,任何提示都非常感激。 明经
修改
根据@Jirka的回答,我得到了一个“纯粹的”XPath表达式:
for $file in doc('files.xml')/files/file,
$ref in //reference
return $file[path = $ref]/path
答案 0 :(得分: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>