※ ChatGPTを利用し、要約された質問です(原文:XPathの関数「text()="value"」のダブルコーテーションをエスケープする方法は?)
XPathの関数「text()="value"」のダブルコーテーションのエスケープ方法
このQ&Aのポイント
XPathのtext()関数でダブルクォートをエスケープする方法について説明します。
シングルクォートとダブルクォートが混在する場合に対応する方法についても解説します。
現在使用しているエスケープ処理に問題がある場合は、新しいエスケープ方法を検討することをおすすめします。
XPathの関数「text()="value"」のダブルコーテーションをエスケープする方法は?
お世話になります。
現在、XPathに関するプログラムを制作しています。
入力されたXPathを解析し、解析した内容に応じて特定の処理をさせるというものなのですが、text() 関数の解析で躓いています。
text()="value"
ここまではわかります。
text()='value1"value2\value3'
上のケースでは、どのように記述すればいいのでしょうか?
シングルコーテーションで括るという解では、シングルコーテーションとダブルコーテーションが混在している場合に対応できません。
そのプログラムではクオート文字をダブルコーテーションに限定しているので、ダブルコーテーションのエスケープ方法を探しています。
現在はバックスラッシュ(\)によるエスケープ処理で対応しています。
text()="value1\"value2\\value3"
しかし、Firefox拡張「XPath Checker」で調べるとバックスラッシュによるエスケープ処理は働いていないため、
この方法は正しくない気がしています。
プログラムとしては問題なく動作していますが、XPath記法に沿っていないのは落ち着きません。
何かヒントとなる情報はないでしょうか?
お礼
XPath1.0仕様上ではエスケープ手段が用意されていないのですね。 あの後、仕様書に行き着きましたが理解が足りないだけかも、との思いから先に進めずにいました。 > EscapeQuotやEscapeAposなんてものがあるので ありがとうございます! この方法でエスケープするようにしてみます。 (残念ながら、「XPath Checker」では機能しませんでした。XPath2.0準拠の動作ではないようです。) > #本題とは関係ないけど,プログラムのユーザーが > 文字列を入力してそれが含まれるような要素を探すようなプログラムなら 逆にユーザが入力したXPathに対応したノードを作成します。(XPathの文法は借りましたが、動作は逆です) 例えば、以下のように。 入力: p[@class="xpath"][text()="XPathですよ"] 出力: <p class="xpath">XPathですよ</p>