缓冲区中是否会为 <xsl:apply-templates 生成任何树> 我怎么能想象呢?



My input.xml如下所示:

    <root>
      <Property>
        <info>
          <Name>A</Name>
          <Value>1000</Value>
        </info>
        <info>
          <Name>B</Name>
          <Value>2000</Value>
        </info>  
        <info>
          <Name>C</Name>
          <Value>3000</Value>
        </info>  
      </Property>
    </root>

所以当我说-<xsl:apply-templates select="//Property/info">树会是什么样子?我能把它想象成下图吗?

      <Property>
        <info>
          <Name>A</Name>
          <Value>1000</Value>
        </info>
        <info>
          <Name>B</Name>
          <Value>2000</Value>
        </info>  
        <info>
          <Name>C</Name>
          <Value>3000</Value>
        </info>  
      </Property>

当匹配模板时,我可以将Property元素作为树中的根元素吗?(当我执行它时,我想是的,并认为单独的树将在记忆中的某个地方创建——这是真的吗?(请解释))

<xsl:template match="Property/info"/>

这里我的实际问题是——模板是应用于缓冲区中的树(将其作为主树)还是应用于原始源树?

a) 如果事情是在缓冲树上计算/应用的,那么当我说时,我们应该无法检索根元素

<xsl:copy-of select="../../*"/>

因为缓冲树并没有根元素,处理器也不知道根元素。[但实际情况如何?]

b) 如果模板应用于原始源树,则

<xsl:template match="Property/info"/>

不应该正常工作吗?(正如我们应该以这种方式给出的:

<xsl:template match="root/Property/info"/>

<xsl:template match="//Property/info"/>

但没有如上所述提及其工作。这怎么可能?)

这里有两个单独的问题:

1) 模板匹配模式如何与源文档树的部分匹配?和

2) 应用特定模板时的上下文节点是什么?

模板匹配模式与XPath表达式不同,尽管它们看起来相似。特别地,它们不假设任何当前上下文节点。"Property/info"匹配树中任何父级为Property元素的info元素。尽管这个匹配模式看起来与select="Property/info"中的XPath表达式相同,但它们有很大的不同;后者将仅选择作为CCD_ 6元素的子元素的CCD_。匹配模式没有后一种限制,也没有,因为上下文节点的概念没有进入匹配模式的规范中。(我想更准确的说法是,对于匹配模式,初始上下文节点是未指定的;它可以是<xsl:apply-templates>[显式或隐式]选择的任何节点。)

一旦(通过匹配)选择了要应用于特定节点的特定模板,则在评估所选模板的内容时,该节点将成为上下文节点。(XSLT处理器不会(从概念上)将树的一部分复制到缓冲区中;上下文节点是原始源文档中的节点。)因此,是的,您可以选择"../../*",因为您是从/root/Property/info的上下文节点开始的。

最新更新