XMLの内容抽出マクロありますかNo.05193
ichiy さん 06/08/04 16:06
 
お世話になります。ichiy@ユーザ です。

XMLの各タグのタグ名と内容を抽出するマクロを探しています。

<?xml version="1.0" encoding="shift-jis" ?>
<test1>
    <リスト番号>0001</リスト番号>
    <名前>ユーザ1</名前>
    <電話番号>09011111111</電話番号>
    <コメント>今日は
あったかい
ですね。</コメント>
    <備考></備考>
</test1>
<test2>
    <リスト番号>0002</リスト番号>
    <名前></名前>
    <電話番号>09022222222</電話番号>
    <コメント></コメント>
    (備考タグは無い)
</test2>



と続くのような形式から、

リスト番号<TAB>名前<TAB>電話番号<TAB>コメント<TAB>備考
0001<TAB>ユーザ1<タブ>
0002<TAB><TAB>09022222222<TAB>...



のように変換したいのです。

似たようなことが出来るものでも構いませんので
ご存知の方がいらっしましたら教えてください。

宜しくお願いします。
----
環境:WinXP SP2
      秀丸エディタ 6.00 beta37

[ ]
RE:05193 XMLの内容抽出マクロありますかNo.05194
山紫水明 さん 06/08/06 13:56
 
 ichiyさん,

 題意を正確に理解しているかどうかわかりませんが,以下の2つのマクロで試
してください。
No.1 はあまり大きなファイルには向かないかも知れません。
No.2 はタグ内容が空白の時に列がそろいにくいかも知れません。

     では, (^^)/~
                                        山紫水明
                                        SANSHISUIMEI
//No.1-------------------------------------------------------//
#handle = hidemaruhandle(0);
$file = filename;
disabledraw;
replaceallfast "\\n" , "", regular;//改行いったすべて削除
gofileend;
#i = 1;
while( 1 ) {
    searchup "(?<=<リスト番号>)[0-9]+(?=</リスト番号>)", regular;
    if( !result ) break;
    $s = gettext( foundtopx, foundtopy, foundendx, foundendy );
    #bx = foundtopx; #by = foundtopy;
    call Search "名前";
    $s = $s + "\t\t" + $$return;
    call Search "電話番号";
    $s = $s + "\t" + $$return;
    call Search "コメント";
    $s = $s + "\t" + $$return;
    call Search "備考";
    $s[#i] = $s + "\t" + $$return;
    moveto #bx, #by;
    deleteafter;
    #i = #i + 1;
}
openfile "/h";
insert "リスト番号\t名前\t電話番号\tコメント\t備考";
while( #i ) {
    insert $s[#i] + "\n";
    #i = #i - 1;
}
replaceallfast "\\t+$" , "", regular;//行末タブ削除
showwindow 1;
#handle2 = hidemaruhandle(0);
closehidemaruforced #handle;
openfile $file;
setactivehidemaru #handle2;
endmacro;

Search:
searchdown "(?<=<" + $$1 + ">).+(?=</" + $$1 + ">)", regular;
if( result ) {
    $$s = gettext( foundtopx, foundtopy, foundendx, foundendy );
}
if( $$s == "" ) $$s = "\t";
return $$s;
//-------------------------------------------------------//

//No.2-------------------------------------------------------//
selectall;
copy;
openfile "/h";
paste;
replaceallfast "[^>]\\f\\n" , "\\0", regular;//タグ以外の改行削除
replaceallfast "^[  \t]+" , "", regular;//行頭空白削除
replaceallfast "^[^<].+\\n" , "", regular;//タグ以外の行削除
replaceallfast "^<[^リ名電コ備].+\\n" , "", regular;
replaceallfast "(<リスト番号>)(.*)(</リスト番号>\\n)" , "\\2\t\t", regular;
replaceallfast "(<名前>)(.*)(</名前>\\n)" , "\\2\t", regular;
replaceallfast "(<電話番号>)(.*)(</電話番号>\\n)" , "\\2\\t", regular;
replaceallfast "(<コメント>)(.*)(</コメント>)" , "\\2\\t", regular;
replaceallfast "(\\n<備考>)(.*)(</備考>)" , "\\2", regular;
replaceallfast "\\t+$" , "", regular;//行末タブ削除
gofiletop;
insert "リスト番号\t名前\t電話番号\tコメント\t備考\n";
endmacro;
//-------------------------------------------------------//


[ ]
RE:05193 XMLの内容抽出マクロありますかNo.05195
ENCODINGSHIFTJIS さん 06/08/07 10:54
 

> XMLの各タグのタグ名と内容を抽出するマクロを探しています。

考えられる方法は 多数あります。
1. XSLTを使う、XSLTのコース課題のレベルなので、勉強すると出来るように
なります。今どきの 必須技能かも。
2.MS提供の Log Parser 2.2 日本語版 を使う、
XMLを吸い込んで TABテキストを 吐き出す 能力がある。
3.MSの PowerShellベータを使う、XMLのストリームを受けて
TSVを吐く スクリプトを書ける。新し物好きで教えたい人はぜひこれで。
4.Perlなどのスクリプト言語を使う、XML操作のライブラリの使い方を
覚えるとできる。
−− 秀丸マクロはこの部類、(xmlモジュールはスクリプト言語のように
作りこんだのが、あるわけではないが)
5.処理速度命 ならば、SAX のAPIで書くか、パーサージェネレータを使い
専用の exe を起こす。

[ ]
RE:05195 XMLの内容抽出マクロありますかNo.05196
ENCODINGSHIFTJIS さん 06/08/07 11:01
 
6.最新ExcelはXMLを吸い込めるので、Excelから TSV保存するだけで
すむかも、Openofficeはどうかは知りません、また、高機能XMLエディタ
でもできるかも。

[ ]
RE:05194 XMLの内容抽出マクロありますかNo.05198
ichiy さん 06/08/08 15:54
 
山紫水明さん、お世話になります。ichiy@ユーザ です。

返信遅れまして申し訳ありません。

マクロ提供ありがとうございます。
掲示頂いたマクロでは、タグ名が固定となるようですね。

そもそもの例がマズかったですが、
任意のタグ名、タグ内容を抽出したいのです。

[ ]
RE:05196 XMLの内容抽出マクロありますかNo.05199
ichiy さん 06/08/08 16:01
 
ENCODINGSHIFTJISさん、お世話になります。ichiy@ユーザ です。

勉強不足で申し訳ありません。

>6.最新ExcelはXMLを吸い込めるので、Excelから TSV保存するだけで
>すむかも、Openofficeはどうかは知りません、また、高機能XMLエディタ
>でもできるかも。

ExcelでXMLファイルを開いたら、ほぼ期待していた形式で
開いてくれるようです。

ありがとうございました。

[ ]
RE:05194 XMLの内容抽出マクロありますかNo.05200
ichiy さん 06/08/08 16:06
 
山紫水明さん、お世話になります。ichiy@ユーザ です。

マクロを注文しといて恐縮ですが、ENCODINGSHIFTJISさんに教えて頂いた、
Excelで開く方法で事足りました。。。

お手数おかけしました。

[ ]