• 締切済み

XMLによるデータ抜き出し

http://question.excite.co.jp/kotaeru.php3?q=1880543 この質問とよく似ていますので便乗させていただきます。 上記の場合で、perlでNoと、nameタグの両方だけを抜き出したい場合、どうすればよろしいでしょうか? 出力結果をこんな感じにしたいのですが…。 <class3> <Personal> <No>1</No> <Name>相上男</Name> </Personal> <Personal> <No>1</No> <Name>柿句毛子</Name> </Personal> </class3> もしよろしければ教えてください。

みんなの回答

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

>欲しいいくつかのタグを取り出す方法です。 う~ん、ほとんど同じなんだけど… 一応書き直してみました。 #--------------------------------------------------------------- use encoding 'UTF-8', STDOUT => 'shiftjis'; use Encode; use XML::DOM; $parser = new XML::DOM::Parser; $doc = $parser->parsefile("class3.xml"); $nodes = $doc->getElementsByTagName("Personal"); $n = $nodes->getLength; for ($i = 0; $i < $n; $i++){ $node = $nodes->item($i); $NoNode = $node->getElementsByTagName("No"); print Encode::decode("UTF-8",$NoNode->item(0)->toString)."\n"; $NameNode = $node->getElementsByTagName("Name"); print Encode::decode("UTF-8",$NameNode->item(0)->toString)."\n"; } $doc->dispose;

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

元のデータから出力結果を考えると、 NoとNameを取り出すというより、 phoneタグを削除する方が簡単みたいに思えるので、 phoneタグを削除する方向でDOMでやってみました。 #--------------------------------------------------------------- use encoding 'UTF-8', STDOUT => 'shiftjis'; use Encode; use XML::DOM; $parser = new XML::DOM::Parser; $doc = $parser->parsefile("class3.xml"); $nodes = $doc->getElementsByTagName("Personal"); $n = $nodes->getLength; for($i=0;$i<$n;$i++){ $node = $nodes->item($i); $phoneNode = $node->getElementsByTagName("phone"); $node->removeChild($phoneNode->item(0)); } print Encode::decode("UTF-8", $doc->toString); $doc->dispose;

tou2
質問者

補足

お答えありがとうございます。 ですが、知りたいのは、ほしいいくつかのタグを取り出す方法です。 もしいい方法があればお願いいたします。

関連するQ&A