さて、私は同じ探求をしていましたが、しばらくすると、xpathにはこれに対するサポートがないことがわかりました。静かにがっかりしました!しかし、私たちはいつでもそれを回避することができます!
シンプルでまっすぐなものが欲しかった。私が持っているのは、アポストロフィの代わりに独自のコードを設定することです。これは、一種の一意のコード(xmlテキストでは発生しないもの)です。たとえば、//apos//を選択しました。これで、xmlテキストとxpathクエリの両方にそれを入れます。(xmlの場合、常に記述しているわけではありませんが、任意のエディターの置換関数に置き換えることができます)。そして今、私たちはどのようにしていますか?これで通常どおり検索し、結果を取得して、//apos//を'に戻します。
私がやっていたことからいくつかのサンプルを以下に示します:(replace_special_char_xpath()はあなたが作る必要があるものです)
function repalce_special_char_xpath($str){
$str = str_replace("//apos//","'",$str);
/*add all replacement here */
return $str;
}
function xml_lang($xml_file,$category,$word,$language){ //path can be relative or absolute
$language = str_replace("-","_",$language);// to replace - with _ to be able to use "en-us", .....
$xml = simplexml_load_file($xml_file);
$xpath_result = $xml->xpath("${category}/def[en_us = '${word}']/${language}");
$result = $xpath_result[0][0];
return repalce_special_char_xpath($result);
}
xmlファイルのテキスト:
<def>
<en_us>If you don//apos//t know which server, Click here for automatic connection</en_us> <fr_fr>Si vous ne savez pas quelle serveur, Cliquez ici pour une connexion automatique</fr_fr> <ar_sa>إذا لا تعرفوا أي سرفير, إضغطوا هنا من أجل إتصال تلقائي</ar_sa>
</def>
およびphpファイル(生成されたhtml)での呼び出し:
<span><?php echo xml_lang_body("If you don//apos//t know which server, Click here for automatic connection")?>