• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:XPathの関数「text()="value"」のダブルコーテーションをエスケープする方法は?)

XPathの関数「text()="value"」のダブルコーテーションのエスケープ方法

このQ&Aのポイント
  • XPathのtext()関数でダブルクォートをエスケープする方法について説明します。
  • シングルクォートとダブルクォートが混在する場合に対応する方法についても解説します。
  • 現在使用しているエスケープ処理に問題がある場合は、新しいエスケープ方法を検討することをおすすめします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

一つのリテラルで表記するのは無理だと思います。…と思ったんだけどなあ まず,XPath 1.0規格で一つのリテラルで表現する事はできないようです。 http://www.w3.org/TR/xpath#NT-Literal >そのプログラムではクオート文字をダブルコーテーションに限定しているので、 これがなく,一つのリテラルでなくて良い(計算結果でも良い)なら 回避策として concat("AB'C",'DE"F') とかどうにでもなるとは思うんですが。 念のためにXPath 2.0の構文を調べてみたら http://www.w3.org/TR/xpath20/#id-literals EscapeQuotやEscapeAposなんてものがあるので 多分"abc""def"というような表記が可能なようです。 #XPath 1.0同様にあとはXQuery 1.0 and XPath 2.0 Functionsの http://www.w3.org/TR/xpath-functions/#func-codepoints-to-string で計算してごまかすぐらい? #実際にアドオンをインストールしていないのでFirefox AddonsがXPath 2.0に対応しているかは判りません。 #本題とは関係ないけど,プログラムのユーザーが 文字列を入力してそれが含まれるような要素を探すようなプログラムなら,XPath Injectionとか怖いから 文字列をXPath Expressionに直接つながないで,要素加えてからやるかな。

think49
質問者

お礼

XPath1.0仕様上ではエスケープ手段が用意されていないのですね。 あの後、仕様書に行き着きましたが理解が足りないだけかも、との思いから先に進めずにいました。 > EscapeQuotやEscapeAposなんてものがあるので ありがとうございます! この方法でエスケープするようにしてみます。 (残念ながら、「XPath Checker」では機能しませんでした。XPath2.0準拠の動作ではないようです。) > #本題とは関係ないけど,プログラムのユーザーが > 文字列を入力してそれが含まれるような要素を探すようなプログラムなら 逆にユーザが入力したXPathに対応したノードを作成します。(XPathの文法は借りましたが、動作は逆です) 例えば、以下のように。 入力: p[@class="xpath"][text()="XPathですよ"] 出力: <p class="xpath">XPathですよ</p>