输入xml
<?xml version="1.0" encoding="UTF-8"?>
<root>
<a>1</a>
<b>2</b>
<b>3</b>
<c>4</c>
</root>
我想知道跟随xpath
之间是否有任何区别//b
//*[name() = 'b']
//*[self::b] (or //self::b)
这些表达式似乎返回相同的结果,但它是否每次都是真的?我倾向于自由地交换它们但有这样的感觉我不应该。
答案 0 :(得分:1)
一个区别是name()
函数使用对传入节点有效的命名空间声明(通常来自XML源),而其他方法使用表达式上下文中的命名空间声明。这意味着如果不同的输入文档使用不同的名称空间前缀,name()
函数可能会导致不可预测的结果。
另一个区别是name()
函数也适用于元素以外的节点。但是对于没有命名空间的元素,可以互换使用所有方法。