• ベストアンサー
※ 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>

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ダブルクォーテーションの吐き出し

    プログラムの素人の質問ですが、知ってる方教えてください。 VB6(SP5)にて、MSCommを使ってRS-232Cポートへデータを 送る処理をしています。そこで、ダブルクォーテーションを 吐き出さなければいけないのですが、「Chr(34)」だとエラーが 起きてしまいます。他にダブルクォーテーションを表示する方法は ありませんか。本当に素人くさい質問ですがよろしくお願いします。

  • PHPのエスケープシーケンスに関して

    PHPで文字列内で(※だぶるクオーテーションおよびシングルクオーテーション)使用するエスケープシーケンスについて、質問です。 PHPでは例えば \(※バックスラッシュ)を文字列内に含めるときバックスラッシュを二つ続けて入力して print "\\"; 上記の用に記述することになると思いいます。 ただ、上記とは違い  print "  \ "; と上記のようにバックスラッシュの前後にスペースをおいて print することでバックスラッシュをエスケープせずに出力させることができます。 本当はものすごく基本的な動作だと思うのですが、 ちょとこの動きが理解できません。 オライリー本をみてもバックスラッシュはエスケープしないといけないと 記載があります。 よろしくご教授ください。

    • ベストアンサー
    • PHP
  • 文字列中のシングルクォートにエスケープシーケンスは必要?

    C言語でダブルクォートで囲まれた文字列内で使われる、「\」で始まるエスケープシーケンスがありますよね。例えば、 「\n」 ⇒ 改行 「\t」 ⇒ タブ 「\"」 ⇒ ダブルクォート 「\\」 ⇒ バックスラッシュ などですが、C言語のリフェレンスを見ると「\'」(シングルクォート)や「\?」(クエスチョンマーク)なども載っていました。でもこれらの文字は、実際はエスケープシーケンスを使わなくても、ちゃんとコンパイルされ表示もされます。 「'」や「?」をC言語の文字列内で使うには、公式には「\」が必要なんでしょうか?

  • 「"」(ダブルクォーテーション)で囲まれた「,」をキャンセルしてcsvの値を抽出するには

    111,"あいうえお",,"さしす,せそ" のテキストファイルを value[0] = 111 value[1] = あいうえお value[2] = value[3] = さしす,せそ いう形に配列に入れたいと思っています。見てもらえばわかると思いますが、数字には「"」(ダブルクォーテーション)が付かなくて、「"」の中に入っている「,」(カンマ)は区切り記号とはみなされず値として取り込んでいます。 splitの正規表現など使えないか苦悩しています。いまだ解決方法見つけられず。 テキストファイルの「"」(ダブルクォーテーション)有り/無しや順番などは都度変更されます。 カンマ区切りで、「"」(ダブルクォーテーション)で囲まれた部分は外して値を取り出すにはどうしたらいいのでしょう? ご存知の方、ご教授ください。

    • ベストアンサー
    • PHP
  • FLASH MX 2004でダブルクォーテーション["]を変数に入れる方法

    見てくださったかたよろしくお願いします。 早速ですが、 getURL("http://***.com","body"); を利用してフレームの中身を操作したいのですが、 テキストファイルから内容を読み込んで getURL(jumpURL,TGT); とするとうまくターゲットにジャンプしてくれません。 jumpURLのURLへは別のウィンドで開くことが出来ます。 TGTの変数の部分をトレースすると body と入っておりダブルクォーテーションが付いていないので ターゲットとして見なされないのかな?と思っています。 "body" のようにダブルクォーテーションをつけるにはどのようにすればいいでしょうか? エスケープ文字とかがあるのでしょうか? よろしくお願いします。

  • DOSコマンドのダブルクォーテーションの扱い

    DOSコマンドでダブルクォーテーションを検索し、 リダイレクションをすることが出来なくて困っています。 例えば findstr "\"!" a.txt は出来ますが findstr "\"!" a.txt >b.txt とするとリダイレクションが出来ません。 grepも同じようです。 またunixコマンドではシングルクオートは、「囲まれた中身をそのままの文字として利用」し、ダブルクオートは、「囲まれた中身に$HOME など $ で始まる文字列があれば、 それを環境変数、シェル変数といった、値に置き換えてから、利用する」という明確な違いがありますが、DOSコマンドでは明確な違いはあるのでしょうか? unixのshellをDOSコマンドに移植しています。 DOSコマンドの参考Webもあまり見つからなくて困っています。 もし参考になりそうなWeb等ありましたら教えてください。

  • シングルクォーテーションとダブルクォーテーションについて

    今、AccessVBAを本を見ながら勉強している初心者です。 フォームから入力されたコードに検索をしたいのですが、 Dim cnCrrDB As ADODB.Connection Dim rsKokyaku As New ADODB.Recordset ・ ・ ・ rsKokyaku.Open "Select * From 顧客マスタ Where _ 顧客コード='" & txtKokyakuCode & "'", _ cnCrrDB, adOpenStatic, adLockOptimistic とあり、[顧客マスタ]テーブルから一致する顧客コードを検索したい。っということは わかるのですが、 顧客コード='" & txtKokyakuCode & "'", のあたりの意味が、、、不明 ちなみにtxtKokyakuCodeというのは  コードを入力するための テキストボックスの名前です。 シングルクォーテーションとダブルクォーテーションを どうゆうふうに扱っているのか 教えてくださーい。 お願いします!!(わかりづらくてすみません)

  • ファイルにコーテーション類を書き込む方法

    HTMLのフォーム(Textarea)で入力したテキストを そのまま、ファイルに書き込みたいです。 (正式にはHTMLエディタのようにしたいです) 以下のソースのように作成しましたが、 シングルコーテーションやダブルコーテーションが ファイルに書き込まれる時に¥がついてしまいます。 ================== 入力フォーム =================== <html> <body> <form name='fm' action='fsave.php' method='post'> <textarea name='txt' rows='20' cols='40'> </textarea> <input type='submit' value='ファイル保存'> </body> </html> ================== fsave.php =================== <?php $txt = $_REQUEST["txt"]; $fp = fopen("sample.html","w"); fwrite($fp,$txt); echo "ファイル書き込み完了"; ?> =============== TEXTAREAへの入力値 =================== <a href='aaa.html'>LINK </a> =============== sample.htmlの中身 =================== <a href=\'aaa.html\'>LINK </a> シングルコーテーションやダブルコーテーションを フォームからPHPに渡して、ファイルに書き込むには どうすればよろしのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • シングルクォート、ダブルクォート使用方法

    初心者で勉強中です。 相当素人な質問なんですがよろしくお願いします。 Perlで使われる、シングル、ダブルクォートの自分の認識なのですが ・ダブルクォートは変数やエスケープ文字を評価してくれる。 ・シングルはそのまま文字列として出力される。 ということだと思っているのですがただ、『print』の後の表示させる文字列、数字などがシングルで囲まれていたりダブルだったり、またどちらも使わない場合などあるのですがこの使い分けはどのようにすれば良いかわかりません。 単に文字列の場合でもダブルクォートで囲っていたりと・・・ 以下の例ですと use strict; print "Content-type: text/html\n\n"; my $hensu = 1; print $hensu."<br>\n"; $hensu = "moji"; print "$hensu"; 上記をブラウザ出力すると 1 moji となるということなのですが、数字であればダブルクォートで囲まなくても展開されるということでしょうか?また後ろの2行の $hensu = "moji"; print "$hensu"; とは、どちらもダブルクォートで囲む必要があるのでしょうか。 法則性についてどなたか分かるかた、おしえていだだけますでしょうか。

    • ベストアンサー
    • Perl
  • PHPの文字列のエスケープについて

    php.iniの設定で「magic_quotes_gpc = On」なっており、htmlentities($str, ENT_QUOTES)で、ダブルおよびシングルクオートを共に変換します。 しかし、シングルクオートがエスケープされて、「'」になるのですが、これを「'」に変換しなければなりません。 (そんな依頼を受けて、プログラミングをしていますが、全くうまくいきませんorz。) 単純に考えて、シングルクオートをエスケープしなければよいと思うのですが、 フォームのデータを受けとるときに、シングルクオートをエスケープしなければならないとマズイことでもあるのでしょうか? 変な質問ですが、宜しくお願いします。

    • ベストアンサー
    • PHP
マジェンダだけ印刷できない!
このQ&Aのポイント
  • インクを入れ替えたらマジェンダだけ印刷できない
  • お使いの環境はWindows10で、無線LANで接続されています
  • ブラザー製品に関する質問です
回答を見る

専門家に質問してみよう