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

1 つの違いは、name()関数は渡されたノード (通常は XML ソースから) で有効な名前空間宣言を使用するのに対し、他のメソッドは式コンテキストから名前空間宣言を使用することです。これは、name()異なる入力ドキュメントが異なる名前空間プレフィックスを使用する場合、関数が予測できない結果をもたらす可能性があることを意味します。

もう 1 つの違いは、name()関数が要素以外のノードに対しても機能することです。ただし、名前空間を持たない要素については、すべてのメソッドを同じ意味で使用できます。

于 2013-10-02T19:20:11.513 に答える