こんなHTMLがあります。
<tr class="even expanded first>
<td class="score-time status">
<a href="/matches/2012/08/02/europe/uefa-cup/">
16 : 00
</a>
</td>
</tr>
余分な空白を除いて、(16 : 00)の文字列を抽出したい。 これは可能でしょうか?
I.この単一の XPath 式を使用します。
translate(normalize-space(/tr/td/a), ' ', '')
説明:
1.1. normalize-space()
は、引数の文字列から、先頭または末尾の空白文字(スペース、タブ、NL、CR文字)を削除し、中間の空白文字を1つのスペースで置き換えた新しい文字列を生成します。
2.2. translate()
normalize-space()
が生成した結果を受け取り、残りの各中間的なスペースを空文字列に置き換えた新しい文字列を生成します。
II.別の方法で
translate(/tr/td/a, '

', '')
を使えば、text()ノードが空かどうかをチェックすることができます。
/path/text()[not(.='')]
は、following-sibling::のような軸で、これらがコンテナでない場合、またはchild::で有用である可能性があります。
注意: xpath は文字列操作ができないと言うコメントがありますが、たとえそのように設計されていなくても、基本的なことはできます: contains(), starts-with(), replace().
空白のノードをチェックしたい場合、一般的にはノードリストの結果セットを持つことになり、matchやreplaceのようなほとんどのxpath関数は1つのノードしか操作できないため、より困難です。
そこで、xpathを使ってコンテナやテキストノードのリストを取得し、それを別の言語で処理することがあります。(例えば、java, php, python, perlなど)。