您可能更喜欢更推式的解决方案,就像这样......
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*" />
<xsl:key name="error-files" match ="err" use="@b" />
<xsl:template match="entry[key('error-files',substring-after(@a,'/'))]">
<xsl:copy-of select="." />
</xsl:template>
</xsl:stylesheet>
或者,如果您不想使用密钥,您可以使用 ...
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*" />
<xsl:template match="entry[@a[substring-after(.,'/') = ../../err/@b]]">
<xsl:copy-of select="." />
</xsl:template>
</xsl:stylesheet>
并且响应 OP 的评论,是的,将结果存储在变量中没有问题。例如,你可以做...
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*" />
<xsl:key name="error-files" match ="err" use="@b" />
<xsl:template match="/*">
<xsl:variable name="results">
<xsl:apply-templates />
</xsl:variable>
<xsl:copy-of select="$results" />
</xsl:template>
<xsl:template match="entry[key('error-files',substring-after(@a,'/'))]">
<xsl:copy-of select="." />
</xsl:template>
</xsl:stylesheet>