0

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判定に使う

 

リサーチ

https://www.google.com/search?q=XPath+日付+以降

ぴったりっぽい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"]

https://winactor.com/questions/xpathでヒットする部分の確認方法/

 

少しだけ近そうなスレッド

https://winactor.com/questions/question/xpathの部分一致について/

anothersolution 回答した質問
回答とコメントは、会員登録(無料)で閲覧できるようになります。