• 締切済み

純Perl製のXMLパーサーはありませんか

horagaiです。お世話になっております。 PerlでXMLファイルを処理する必要があり、Perlで使えるXMLパーサーを探してみたところ、XMLParserというそのものずばりの名前のモジュールがあることがわかりました。 しかし、これはXMLパーサー本体ではなく、expatというC言語で書かれたXMLパーサーを利用するためのインターフェイスらしいです。それに私は無料ホームページスペースで使いたいので、コンパイルの必要なモジュールは利用できません。 Perlだけで使える(expatのようなPerl以外で書かれた非標準的外部プログラムを必要としない)XML処理用のライブラリー(モジュールではなくパッケージ)をご存知ないでしょうか。 出来れば日本語も処理できる(それもUnicodeだけでなくEUC-JPやShift-JISのファイルも)ようなものが望ましいです。 Perlはテキスト処理が得意なので、Perlで書かれたXMLパーサーは当然あると思っていたのですがどうも見つかりません。 なお利用目的としてはデータ構造を取り出すと言うよりも単にXMLデータをHTMLに直したいだけなので、別にXMLパーサーでなくてもそのような目的に使えるようなパッケージであればそれでも構いません。 なおCPANも一応はチェックして見ましたが見つかりませんでした。(もちろん見落としはあるかも知れませんが) よろしくお願いします。

  • XML
  • 回答数2
  • ありがとう数8

みんなの回答

  • alfeim
  • ベストアンサー率58% (114/195)
回答No.2

XML->HTMLの変換だけならXSLTがあればいいのでしょうから http://xmlxslt.sourceforge.net/ が使えるのではないでしょうか? ほかにもlibxmlへのラッパもあるようです。これならjakartaさんの示したXercesよりは入っている可能性が高そうですが・・・ もっとも文字コードのことを考えたらXerces+ICU(またはXML4C)とかを用意できる環境を探したほうがいいんでしょうけど。

horagai
質問者

補足

alfeimさんありがとうございます。 >http://xmlxslt.sourceforge.net/ > が使えるのではないでしょうか? おお。これはよさそうだ。と思ってよく見たら… XML::XSLTを使うためにはXML::Parserが必要 と書いてありました。 はぁぁ~。やっぱりどこまでいってもexpatから逃れられないみたいです。

  • jakarta
  • ベストアンサー率38% (607/1597)
回答No.1

残念ながら無料スペースでは使えないと思いますがPerl用のXerces XML parserというのがあります。参考にしてみてください。 http://xml.apache.org/xerces-p/index.html

horagai
質問者

お礼

jakataさん。ありがとうございました。 でも、これもやはりパーサーそのものではなくラッパーのようですね。

関連するQ&A

  • XML::Parser::Expat が無い?

    RSSフィードを読むCGIを作りたいと考えています。 XML::RSSを入れると、 ・XML/Parser.pm ・XML/Parser/Expat.pm が無いというエラーになったので入れました。 が、今度は、 「Can't locate loadable object for module XML::Parser::Expat」 というエラーになりました。 「XML::Parser::Expat」は、Expat.pm内にあるのに何故でしょうか? ちなみにperl5.005で、pmは全てCPANから落としました。

    • ベストアンサー
    • Perl
  • XML DOM XMLパーサーについて理解していません

    XMLについてイマイチ理解していないので教えてください。PHPでXMLファイルを開いて何らかの処理をするとします。例えば <?php //ドキュメントオブジェクトの作成 $doc = new DOMDocument(); //XML 文書ファイルのパース(DOM ツリーの作成) $doc->load("docs/td101.xml") //要素"b"を取得する $bElement = $doc->getElementsByTagName("b")->item(0); //取得した要素"b"に属性"ad"を設定する $bElement->setAttribute("ad","Fukuoka"); //ドキュメントをシリアライズする $doc->save("docs/result101.xml"); ?> のようにXMLファイルに属性を追加するという処理を行うとします。この時、DOMはPHPによって生成されるんでしょうか?またXMLはXMLパーサーによって解析されると本で読んだのですが、この場合PHPがXMLパーサーの機能を持っているんでしょうか?それともブラウザにXMLパーサーの機能があり、ブラウザ側で処理をされているのでしょうか?意味がわからなくて申し訳ないですが、この辺りを理解していなくて・・・御願いいたします。

    • ベストアンサー
    • XML
  • Perlについて教えてください。

    Perlについて教えてください。 私はPerl、Linux(FreeBSD,CentOS)について初心者の為よくわからないので2点質問させてください。 ネットでPerlについて調べたところ 1. WindowsでのPerl開発 = Active Perl(ActiveState社) WindowsでのPerl開発 = OSに最初から組み込まれているもの(違っていたらすみません) との記述がありますが、ActiveState社のHPに行くとWindows,Mac,Linux,SunのActive Perl がありますがActive PerlはそれそれのOSで同じソースががつかえるのでしょうか? 2. Windows XPにActive Perlをインストールしたところ「Perl package Manager」もインストール されていたので、起動してみるとインストールされている(インストールできる)PPMが表示されますが PPM(Perl Package Modeule)=Win32用Perlモジュール CPANのPerlモジュール=Linux用のPerlモジュールと考えていたのですが 両方とも表示されています。 CPANで入手できるPerlモジュールはWindows環境下のActive Perlでもしようできるのですか? 馬鹿な質問と思うのかもしれませんが是非教えてください。

    • ベストアンサー
    • Perl
  • XMLデータをパーサーをかけてテキストデータにするには?

    VB2005の初心者です。 XMLファイルを読み込んで、パーサーをかけてテキストデータにしたいのですが、やり方が分りません。 (パーサーを使わずにテキストデータにすることはできます。) ご存知の方は、ヒントでも良いので教えていただきたいです。 仕事で行き詰っているため、たくさんの方の情報をいただけると幸いです。 下記は、パーサーを使わないやり方です。 Dim xmlDoc As XmlDocument = New XmlDocument Dim strText As String xmlDoc.PreserveWhitespace = True xmlDoc.Load("C:\XMLData.xml") strText = xmldoc.OuterXml パーサーを使う場合、下記のようになると思うのですが、 どのようにテキストデータにすれば良いのか分りません。 (OuterXmlが使えません。) Dim xmlDoc As MSXML2.DOMDocument = New MSXML2.DOMDocument Dim strText As String xmlDoc.PreserveWhitespace = True xmlDoc.Load("C:\XMLData.xml") よろしくお願い致します。

  • XML::XPathを使う

    エラーがでて期待する出力が出ず困っています。 ファイル名とXPathのコマンドライン引数をとり、 指定されたパスに一致するノードを出力するものです。 (参考書の写しなので、記述ミスはないと思います。) ■grabber.pl use XML::XPath; use XML::XPath::XMLParser; my $xpath = XML::XPath->new( filename => shift @ARGV ); my $nodeset = $xpath->find( shift @ARGV ); foreach my $node ( nodeset->get_nodelist ) { print XML::XPath::XMLParser::as_string( $node ) . "\n"; } コマンドラインに入力しているものは、 perl grabber.pl data.xml "/inventory/category/item/name" ■data.xml <?xml version="1.0"?> <inventory date="2001"> <category> <item id="2"> <name>aaaa</name> </item> </category> </inventory> です。 perl grabber.pl data.xml "/inventory/category/item/name" としても、下記にエラーが出ます。 Can't locate object method "get_nodelist" via package "nodeset" (perhaps you for got to load "nodeset"?) at grabber.pl line 5. いろいろ試してみたり調べたのですが、 行き詰ってしまいました。 期待する出力は"<name>aaaa</name>"なのですが・・・ どなたかこのエラーの原因がおわかりになるかた いらっしゃいますでしょうか。 環境は以下になります。 ・windowsxp ・activePerl モジュールのインストール済み ・XML-XPath ・XML-Parser 以上です。

    • ベストアンサー
    • Perl
  • Perl での XML 処理での DTD 宣言につ

    Perl の XML::LibXML モジュールを使用して XML を処理しています。 例えば、 <?xml version="1.0" encoding="UTF-16" standalone="no"?> <!DOCTYPE aaa PUBLIC "-//bbb//CCCC//EN" "ddd.dtd" []> <doc> ....... </doc> のようなXMLに対してPerlで処理をして、 最後に documentElement を toString して書き出しています。 しかし、この場合、DTD宣言部分を書き出すことができません。 XML::LibXMLでこの部分を取得して書き出すことはできますでしょうか。 どうぞ、よろしくお願いします。

    • ベストアンサー
    • Perl
  • Perlのモジュールが極端に少ない

    OS(CentOS 6.2 / 64bit)にデフォルトでインストールされているPerl(version 5.10.1)を使って勉強しているのですが、参考書に記載されているメジャーなモジュールがインストールされてなく、困っています。 自分でインストールする必要があるのかと思い、モジュールのインストール方法を調べたところ、CPANというモジュールを使えば簡単にモジュールがインストールできると知ったのですが、このCPANモジュールも入っていない模様。 ではまずはCPANモジュールから手動でインストールしようかと思ったところ、CPANモジュールインストール時のMakefile.PLを実行すると、ExtUtilsというモジュールが無いと怒られてしまい実行できませんでした。 このような場合、通常よく使われるようなモジュールをまとめてインストールするような方法は無いのでしょうか。 ※ちなみに、@INCでは以下のディレクトリが登録されていました。 ・/usr/local/lib64/perl5 ・/usr/local/share/perl5 ・/usr/lib64/perl5/vender_perl ・/usr/share/perl5/vender_perl ・/usr/lib64/perl5 ・/usr/share/perl5

    • ベストアンサー
    • Perl
  • perl xml解析について

    perl初心者です。 以下のxmlデータの「http://www.google.co.jp」をxml解析して値を取得したいのですが、 どのようなプログラムを記述すればよろしいのでしょうか? <?xml version="1.0" encoding="x-sjis-cp932" ?> <Res_result> <result result="1" /> <result redirect="http://www.google.co.jp" /> </Res_result> いろいろ試してみましたが、どうもうまくいきません。 ちなみにサーバーにインストールされているxml関連のモジュールが XML::Simple XML::Parser となります。 ご教授の方、宜しくお願い致します。

    • ベストアンサー
    • Perl
  • Perlのライセンス(GLP、Artistic License)

    XML::RSSモジュールをCPANからダウンロードして使用することを考えています。 お客さまの社内システムの構築をPerlベースでしており、 お客さま環境にモジュールをインストールして わたしが作成したスクリプトで、XML::RSSモジュールをライブラリのようにして使用するつもりです。 XML::RSSモジュールの中身は一切変更しません。 このXML::RSSモジュールのライセンスは、Perlと同じ=GLPかArtistic Licenseのどちらか、ということになっていますが ライセンスについて考えなきゃならないのが初めてなので ぐーぐる先生にきいていろいろ見てみても どうも実際的に必要なことが理解できません。 バカですみません。 上記のような使い方をするときに、具体的にわたしがしなければならないことは何かあるのでしょうか? モジュール作成者の名前をわたしの作成したスクリプトにも書いとかなきゃいけない、とか わたしの作成したスクリプトを全世界に公開しなきゃならない、とか。 簡単に教えていただけると、たいへんに助かります。 よろしくおねがいしまっす。

  • PerlでXMLのフィルタリング

    いつもお世話になっております。Perl初心者です。 以下のサイトを参考に、XML::Parser::PerlSAX を使用して、XMLファイルをフィルタリングするプログラムを作成しようと考えています。 http://mkweb.bcgsc.ca/intranet/perlbook/pxml/ch05_01.htm ここで、ある要素のある属性の、異なる属性値ごとに、文字データイベントを処理する方法を変えたいのですが、どのようにすればよいでしょうか。 各種SAXイベントハンドラも、XML::Handler::Subs も考えましたが、何を使えばよいか検討がつきません。よろしくお願いします。

専門家に質問してみよう