1. ホーム
  2. xpath

[解決済み] normalize-space(.)とnormalize-space(text())の違いは何ですか?

2022-02-11 13:06:42

質問

XPath式を書いていて、変なエラーが出たので直しましたが、次の2つのXPath式の違いは何でしょうか?

"//td[starts-with(normalize-space()),'Posted Date:')]"

そして

"//td[starts-with(normalize-space(text()),'Posted Date:')]"  

主に、最初のXPath式は何をキャッチするのでしょうか?というのも、おかしな結果がたくさん出ていたからです。では text() はマッチングに影響を与えるのでしょうか?また、「このような場合、どのような違いがあるのでしょうか? normalize-space() &です。 normalize-space(.) ?

解決方法は?

さて、本当のところ、この .text() ?

. はカレントノードです。そして、文字列が期待される場所でこれを使用すると(すなわち normalize-space() これは、要素の場合、要素内のすべてのテキストノードを連結したものです。(この質問は本当に要素についてだと思うので)。

text() 一方、現在のノードの直接の子であるテキストノードのみを選択します。

つまり、例えばXMLがあるとします。

<a>Foo
    <b>Bar</b>
  lish
</a>

と仮定すると <a> が現在のノードです。 normalize-space(.) が返されます。 Foo Bar lish しかし normalize-space(text()) は失敗します。 text() は、2つのテキストノードからなるノードセットを返します ( Foolish を含む)、どの normalize-space() は受け入れない。

長い話を短くすると、ある要素内のすべてのテキストを正規化したい場合は . . 特定のテキストノードを選択したい場合は text() しかし、その名前にもかかわらず、常に覚えておいてください。 text() はノードセットを返すが,これは要素が1つしかない場合にのみ自動的に文字列に変換される.