重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

お世話になります。

Perlを使って以下のようなXMLドキュメントを読み込み、テキストファイルの出力を行いたいと思って、正規表現等を使ってプログラムを作ってはいましたが、なかなかうまく行かず、行き詰まってしまいました。

~~読み出すファイルのタグ~~
<info num = 1>
<name>namae1</name>
<nunber>10</number>
</info>
<info num =2>
<name>namae2</name>
<nunber>25</number>
</info>


~~終了~~

上記で読み出したい要素は、それぞれの<info>タグ内の<name>と、<nunber>のタグ内の要素です。
そして、その要素をテキストファイルに出力する。というようなプログラムを考えております。

事情により、出来れば、Perlのモジュールを使わずに正規表現などにて取り出したいと思っていますが、楽な方法が有ればその方法もおしえていただければと思います。
使用目的は、ローカル上でXMLドキュメント内のデータを抽出することです。

何か良い方法が有れば、ご教授いただけると助かります。
よろしくお願いします。

A 回答 (2件)

> XML用のライブラリって標準だったかな?)



corelist XML

XML was not in CORE (or so I think)

corelist XML::Simple

XML::Simple was not in CORE (or so I think)

corelist XML::Parse

XML::Parse was not in CORE (or so I think)

コアモジュール(標準添付)ではないですね。
#5.8.8の場合

うまくいかないってのはたぶん改行を含んでいるのに sオプションつけてないとか、
最長一致で次の要素まで飲み込んでるとか
そんな理由だと思いますが

自前で正規表現でゴリゴリやるなってのには賛成です。
    • good
    • 0

>Perlのモジュールを使わずに正規表現などにて


個人的には「止めとけ、せめてXML DOMを経由しろ」と思っている。
ので

>事情により、
聞かせて。(管理者が自分でなくモジュールを追加できないとか・・・。XML用のライブラリって標準だったかな?)

====================
やめとけっていった理由だけど

<root>

<info num ="1">
<name>namae1</name>
<number>10</number>
</info>
<info num="2">
<name>namae2</name>
<number>25</number>
</info>
<info num="3">
<name><!-- </name><name> --></name>
<number>25</number>
</info>
<info num="4">
<name><![CDATA[ </name><name> ]]></name>
<number>25</number>
</info>
<info num="5">
<name>&lt;</name>
<number>25</number>
</info>
<info num="6">
<name>&#x2407;</name>
<number>25</number>
</info>
<info num="7">
<name>*</name>
<number>25</number>
</info>
<info num="8">
<name><![CDATA[</name><!-- <name> --> ]]></name>
<number>25</number>
</info>
<info num="8">
<name><![CDATA[</name><!-- <name> * ]]></name>
<number>25</number>
</info>
<info num="9">
<name>>-- > </name>
<number>25</number>
</info>
<info num ='10"'>
<name>namae1</name>
<number>10</number>
</info>
<info num ="11'">
<name>namae1</name>
<number>10</number>
</info>
</root>

<!--
どこのパーザ経由したかわかんない状態だと
XMLファイルがどういう風になっているかわからないし・・・
(サンプルはかなりというか物凄く意地悪に作ってますが)

どうでもいいけど CDATAマーク区間ならまだしも,#PCDATA中にも]]>って出現できないんだね。初めて知った。


上のように要素中に文字参照があった場合
ソースのまま取り出すべきか,展開かますべきか・・・とか
考えなきゃいけないことがたくさん
-->

この回答への補足

回答ありがとうございます。

事情というのは・・・
>(管理者が自分でなくモジュールを追加できないとか・・・。)
ご指摘の通り、似たような事情ですが、管理者が自分でないことでモジュール追加変更などの設定変更が自由に出来ないことと、作ったPerl自体をローカルで実行したいと考えているからです。
(支援ツールとして使ってもらうことを考えると、使う人の数が増えるほど、設定を行ってもらう人の数が増えるため、作った意味がないなぁと感じています。)
また、ローカルで実行することでXMLドキュメントのタグが変わったり、つかうひとによって、抽出したいタグの要素が違ったりしたときに対応できると思ったからです。(済みません。考えが甘くて・・・。)

長文失礼しました。

補足日時:2008/01/16 21:13
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

>上のように要素中に文字参照があった場合
>ソースのまま取り出すべきか,展開かますべきか・・・とか
>考えなきゃいけないことがたくさん

確かに今考えてみるとそうですね。取り出したい要素の内容が複雑になればなるほど、モジュールを使うメリットが大きいように思います。
モジュールを使って組み直したいと思います。(XML DOMを使って組む方法がよくわかりませんが。。。)

お礼日時:2008/01/16 21:53

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