人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

xml ファイルに含まれる要素と属性の一覧を知りたい

ある xml ファイルには、「おそらく」要素が A、B、C、D の 4 種類あり、要素 A には、A1、A2、A3、A4 の属性、要素 B には、B1、B2、B3、B4 の属性、要素 C と要素 D にはそれぞれ、属性 C1 と D1 がある、と「思われます」。

しかし、これ以外にも要素や属性があるかもしれません。
そこで、何かしらの方法を使って、XML ファイルから要素と属性の一覧を取得したいと思います。
重複するものは無視して、一意のものだけを一覧にしたものがほしいと思っています。

こうした XML ファイルは合計で 20 ファイルくらいあり、サイズはまちまちで数百 KB から 150 MB までです。
ただし、含まれている主要な要素と属性は同じだと思います。
150 MB が流石に大きすぎるのであれば、何らかの方法で分割は可能です。

PHP 5.3.0、秀丸、EXCEL 2007、XMLEDITOR.NET を使っています。
そのほかフリーソフトや簡単なスクリプトでこの一覧を取得する方法を教えてください。

●質問者: にぎたま
●カテゴリ:コンピュータ
✍キーワード:.NET A1 A3 b2 B4
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● t-wata
●80ポイント ベストアンサー

phpマニュアルにあるSAXのサンプルコードをベースに、1つのxmlを読み込み、単純に要素とそれに対する属性を一意になるように取得し、最後に"要素,属性1,属性2...."のようなCSVを出力するサンプルを作ってみました。

phpはほぼ初めてなんで、変な部分があるかもしれませんが、これを適当にいじって複数ファイルに対応させたりすれば何とかなるんじゃないですか?

<?php
$file = "test.xml";
$map_array = array();

function startElement($parser, $name, $attrs) 
{
 global $map_array;
 if (isset($map_array[$name])) {
 $tmp_attrs = $map_array[$name];
 foreach(array_keys($attrs) as $aname){
 if (!isset($tmp_attrs[$aname])) {
 $tmp_attrs[$aname] = $attrs[$aname];
 }
 }
 $map_array[$name] = $tmp_attrs;
 } else {
 $map_array[$name] = $attrs;
 }
}
function endElement($parser, $name) {}

$xml_parser = xml_parser_create();
xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, true);
xml_set_element_handler($xml_parser, "startElement", "endElement");
if (!($fp = fopen($file, "r"))) {
 die("could not open XML input");
}

while ($data = fread($fp, 4096)) {
 if (!xml_parse($xml_parser, $data, feof($fp))) {
 die(sprintf("XML error: %s at line %d",
 xml_error_string(xml_get_error_code($xml_parser)),
 xml_get_current_line_number($xml_parser)));
 }
}
xml_parser_free($xml_parser);

foreach (array_keys($map_array) as $name) {
 $list = "";
 $attrs = $map_array[$name];
 foreach(array_keys($attrs) as $aname) {
 $list = "$list,$aname";
 }
 print "$name$list\n";
}
?>
◎質問者からの返答

ありがとうございます。

求めているような形になりました。

今回の質問とは異なりますが、ちょっといじって、違うことにも役立ちました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ