gpt4 book ai didi

xml - XSLT 应用模板选择中的 "@*|node()"是什么意思?

转载 作者:数据小太阳 更新时间:2023-10-29 01:37:33 25 4
gpt4 key购买 nike

我阅读了一些 XSLT 示例并发现该代码:

<xsl:apply-template select="@*|node()"/>

这是什么意思?

最佳答案

XPath 表达式 @* | node()选择属性节点 (@*) 和所有其他类型的 XML 节点 (node()) 的并集

它是 attribute::* | child::node() 的简写.

在 XSLT 中,XPath 是相对于上下文节点 和默认的 selection axischild轴,所以表达式

  • 选择上下文节点的所有属性和直接子节点(当用作 select="..." 表达式时,例如在 <xsl:apply-templates> 中)
  • 匹配所有属性节点和其他节点而不考虑上下文(当用作 match="" 中的 <xsl:template> 表达式时)- 请注意,选择节点和匹配它们之间存在差异:上下文节点仅对选择很重要。

假设以下节点是上下文节点:

<xml attr="value">[
]<child />[
]<!-- comment -->[
]<child>
<descendant />
</child>[
]</xml>

表达式node()不仅会同时选择 <child>节点,还有四个纯文本节点(为了可见性用 [] 表示)和注释。 <descendant>未被选中。

XML 的一个特殊特征是属性节点不是它们所属元素的子元素(尽管属性的父元素是它所属的元素)。

这种不对称关系使得有必要单独选择它们,因此 @* .

它匹配属于上下文节点的任何属性节点,因此 attr="value"也将被选中。

|是 XPath 联合运算符。它从两个单独的节点集创建一个节点集。

<xsl:apply-templates>然后找到合适的 <xsl:template>对于每个选定的节点并为该节点运行它。这就是我上面提到的模板匹配部分。

关于xml - XSLT 应用模板选择中的 "@*|node()"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11167501/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com