为什么 //descendant 也在这个 XSLT 模板中评估兄弟姐妹?

发布于 2025-01-16 07:16:22 字数 1236 浏览 0 评论 0原文

我很好奇为什么这个 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

cdca 的兄弟,所以我很困惑。

我将不胜感激任何有助于阐明这一点的帮助。

先感谢您。

I am curious why this 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>  

over this XML document

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <!DOCTYPE a>
    <a>
      <b>
        <c>
          <ca>CA</ca>
          <cd>CD</cd>
        </c>   
      </b>  
    </a>

has the result:
CACD

I'm mostly interested in why CD evaluates properly because I thought current context in a template is defined by match attribute, that is to say, ca in the second template.
If that was correct, in the context of ca, with //cd, as far as I know, the XSLT processor should be searching by any descendant of ca of any level with name cd.

cd is a sibling of ca, so I am very confused.

I would appreciate any help which sheds light on this.

Thank you in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

や三分注定 2025-01-23 07:16:22

使用.//cd进行相对于上下文节点的选择,以/开头的路径总是选择从文档节点/根节点开始,即//cd/descendant-or-self::node()/cd

Use .//cd to select relative to the context node, a path starting with / always selects starting at the document node/root node, i.e. //cd is /descendant-or-self::node()/cd.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文