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