Xpath 什么';s name()条件和self::axis之间的区别

Xpath 什么';s name()条件和self::axis之间的区别,xpath,Xpath,用于输入xml <?xml version="1.0" encoding="UTF-8"?> <root> <a>1</a> <b>2</b> <b>3</b> <c>4</c> </root> 这些表达式似乎返回相同的结果,但是否每次都是真的?我倾向于自由地交换它们,但我觉得我不应该这样做。一个区别是name()函数使用传入节点上

用于输入xml

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <a>1</a>
    <b>2</b>
    <b>3</b>
    <c>4</c>
</root>

这些表达式似乎返回相同的结果,但是否每次都是真的?我倾向于自由地交换它们,但我觉得我不应该这样做。

一个区别是
name()
函数使用传入节点上有效的名称空间声明(通常来自XML源),而其他方法使用表达式上下文中的名称空间声明。这意味着如果不同的输入文档使用不同的名称空间前缀,那么
name()
函数可能会导致不可预测的结果

另一个区别是
name()
函数也适用于元素以外的节点。但是对于没有名称空间的元素,可以互换使用所有方法

//b

//*[name() = 'b']

//*[self::b]     (or //self::b)