为什么 //descendant 也在这个 XSLT 模板中评估兄弟姐妹?
Why //descendant is evaluating siblings as well in this XSLT template?
我很好奇为什么这个 XSLT :
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<xsl:apply-templates select="//ca"/>
</xsl:template>
<xsl:template match="ca">
<xsl:value-of select="."/>
<xsl:value-of select="//cd"/>
</xsl:template>
</xsl:stylesheet>
关于这个 XML 文档
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE a>
<a>
<b>
<c>
<ca>CA</ca>
<cd>CD</cd>
</c>
</b>
</a>
有结果:
CACD
我最感兴趣的是为什么 CD 可以正确评估,因为我认为模板中的当前上下文是由匹配属性定义的,也就是说,第二个模板中的 ca。
如果那是正确的,在 ca 的上下文中,使用 //cd,据我所知,XSLT 处理器应该由 ca[= 的任何后代搜索名称为 cd.
的任何级别的 44=]
cd是ca的兄弟姐妹,所以我很困惑。
如果能提供任何帮助,我将不胜感激。
提前致谢。
使用.//cd
到select相对于上下文节点,以/
开头的路径总是selects从文档node/root节点开始,即 //cd
是 /descendant-or-self::node()/cd
.
我很好奇为什么这个 XSLT :
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<xsl:apply-templates select="//ca"/>
</xsl:template>
<xsl:template match="ca">
<xsl:value-of select="."/>
<xsl:value-of select="//cd"/>
</xsl:template>
</xsl:stylesheet>
关于这个 XML 文档
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE a>
<a>
<b>
<c>
<ca>CA</ca>
<cd>CD</cd>
</c>
</b>
</a>
有结果: CACD
我最感兴趣的是为什么 CD 可以正确评估,因为我认为模板中的当前上下文是由匹配属性定义的,也就是说,第二个模板中的 ca。 如果那是正确的,在 ca 的上下文中,使用 //cd,据我所知,XSLT 处理器应该由 ca[= 的任何后代搜索名称为 cd.
的任何级别的 44=]cd是ca的兄弟姐妹,所以我很困惑。
如果能提供任何帮助,我将不胜感激。
提前致谢。
使用.//cd
到select相对于上下文节点,以/
开头的路径总是selects从文档node/root节点开始,即 //cd
是 /descendant-or-self::node()/cd
.