在XSLT中,推荐用local-name(.)获取当前元素节点名、local-name(..)获取父元素节点名,二者均忽略命名空间前缀,更稳定;需配合self::element()和..存在性判断确保安全。

在XSLT中,获取当前节点名和父节点名主要通过 name() 或 local-name() 函数配合上下文节点(如 .、..)来实现。关键在于区分节点类型(元素、属性、文本等),并注意命名空间影响。
获取当前元素节点名
对当前上下文是元素节点的情况(如在 中),用:
-
name(.):返回带前缀的完整 QName(如ns:book),适用于需要保留命名空间前缀的场景 -
local-name(.):只返回本地名(如book),忽略前缀和命名空间,更常用
例如: 输出当前匹配元素的名称。
获取父元素节点名
使用 .. 表示父节点,再结合函数:
-
local-name(..):获取直接父元素的本地名(推荐,简洁且避开命名空间干扰) -
name(..):返回父节点的完整 QName,仅当需显式处理前缀时使用
注意:若当前节点是属性或文本,.. 指向其所属元素,仍可安全调用 local-name(..);但若当前是根节点(无父),该表达式返回空字符串。
安全获取(避免错误)
为防止在非元素节点(如文本、注释)上误用,可加条件判断:
- 检查是否为元素:
- 获取父元素名时确保父节点存在:
这样能避免在属性节点或文档根下执行时报错或返回意外结果。
区分 name() 和 local-name() 的实际影响
当XML含命名空间(如 )时:
-
name(.)返回ns:book(依赖前缀绑定) -
local-name(.)返回book(稳定、不依赖前缀)
因此,除非明确需要前缀信息,否则优先用 local-name(),更健壮可靠。










