3

对于输入 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)

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

4

1 回答 1

1

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

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

于 2013-10-02T19:20:11.513 回答