XSLT中怎么获取当前节点名和父节点名

19次阅读

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

XSLT中怎么获取当前节点名和父节点名

在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(),更健壮可靠。

text=ZqhQzanResources