XPathで日付以降を条件にしたい
XPathで日付以降を条件にしたいです。
お知恵を拝借させてください。
条件に合致してれば値を取得したい。
目的をクリアできれば手段は問いません。
取得値の出力先がExcelなので、運用サイドでExcel関数とか条件付き書式あたりでしのいでもらってます。
シナリオ内で値をチェックするフローも必要なら考えます。
検索キーのIDリストは1000件規模。
一括でチェックできるなら積極採用したい。
1件ずつチェックだとタイムロスが残念。
できることならXPathで華麗にズバッと取得したい。
サンプル.html
<html>
<head>
<title>テスト</title>
</head><body>
<table>
<tr><td>分類</td><td>日付</td></tr>
<tr><td>A</td><td>2023/05/01</td></tr>
<tr><td>A</td><td>2023/03/01</td></tr>
<tr><td>B</td><td>2023/01/01</td></tr>
</table></body>
</html>
実際のテーブル
- 列が10以上ある
- 行は10〜50程度
- 上の行ほど新しいデータ
- 日付は必ずしも上にあるほど新しいとは限らない
- 同日も存在する
現在地
- ひとまずこれで行を絞れてる
//tr[descendant::td[3][text()="区分A"] and descendant::td[5][text()="状態X"]]
- 日付の条件をここに加えたい
//tr[descendant::td[3][text()="区分A"] and descendant::td[5][text()="状態X"] and descendant::td[7][ここ]
日付以降を条件にする目的
- ヒットした1番目の値を後続処理のExcel判定に使う
リサーチ
ぴったりっぽいtranslate関数を見つけて試したものの、意図通りに活用できず、、
XMLの文字データを範囲指定して検索する方法
https://social.msdn.microsoft.com/Forums/netframework/ja-JP/9cb8f9de-f2aa-494c-8c30-90fde54fec86/xml?forum=aspnetja
- かなり深堀って、translate関数はマスターできた気がする
- 等式/不等式はtrue/falseの判定になるだけで、「この日以降」な掴みかたに至れずにいる
- 何かを組み合わせることで「この日以降」を目指せるのかどうか
このへんが同じ内容のバリエーション
//td[7][translate(//td[7],"/","") >= "20230501"]
//td[7][20230501 >= "20230501"]
//td[7][20230501 >= 20230501]
//td[7][true]
- かなりのパターンを試して書き出したものの、要するにこうでしかなかった
DevToolsで「この日以降」のヒット数を掴めることを期待して、激しく砕け散った軌跡(ほんの一部を抜粋)
//tr[2]/td[2][translate(//tr[2]/td[2],"/","") >= "20230301"]
//tr/td[2][translate(//tr/td[2],"/","") >= "20230301"]
//td[2][translate(//td[2],"/","") >= "20230301"]
少しだけ近そうなスレッド