出産前後の痔にはご注意!

XML::XPathを用いてやりたいことはほぼ実現できたのですが、
いざ実装しようとしたところで最も大きな問題にぶつかってしまいました。

日本語で検索できないのです。

$xml->find('/list/item[text()="りんご"]');

エラーにはなりませんが、合致するはずのノードが出てきません。

http://kentn.at.infoseek.co.jp/xml/perl_xpath.html
↑のページを見ると対処法はあるようなのですが、
XML/XPath.pm を修正しても以下のようなエラーが表示されます。

------------------
Query:
/list/ite...
^^^
Invalid query somewhere around here (I think)
------------------

XML::XPathで日本語を扱っている方がいましたら
対処法を教えていただけませんでしょうか。

また、XML::XPath::find()で正規表現を使うことは
できないのでしょうか。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

質問文で書かれている対処法は、要素名に関するモノです。


ウチでは、それは適用していませんが、
$xml->find('/list/item[text()="りんご"]');
自体はうまくマッチングできました。
おそらくPerlスクリプト自体のコードが違うのではないかと思います。
スクリプトの先頭に
use encoding 'UTF-8', STDOUT => 'shiftjis';
のように書いて
スクリプト自体をUTF-8で保存すると良いと思います。
そうでない場合には、おそらく"りんご"の部分をEncodeで変換する必要があると思います。

>Invalid query somewhere around here (I think)
のエラーは、やはり要素名に日本語を使っているとでるようです。

>XML::XPath::find()で正規表現を使うことはできないのでしょうか
XML::XPath::findについて詳しくは知らないですが、
規格的には(つまり機能拡張されていないのであれば)いわゆるPerlで扱うような正規表現は使用できません。
    • good
    • 0
この回答へのお礼

ありがとうございます!
use encoding 'UTF-8', STDOUT => 'shiftjis';
を指定することで上手くいきました!!

Perl 5.8から追加された機能なんですね。
わざわざJcodeを仲介する必要もなくなり、
コードもスッキリさせることができました。

お礼日時:2006/01/18 18:35

対処法の適用をしてみると、


日本語タグのXPath指定によるマッチは、うまく行きました
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング