MATLAB Answers

xmlファイルのタグ要素の抽出

77 views (last 30 days)
Shinij Kumagai
Shinij Kumagai on 23 Sep 2020 at 9:49
Commented: Shinij Kumagai on 26 Sep 2020 at 4:53
以前の質問が上手く反映されていなかったので、再度、投稿させていただきました。 下記XMLファイルの ChNameJp~</ChNameJp>だけを読み込んでリストを作りたいです。 下記URLを参考にしたのですが、うまく、読み込むことができませんでした。 https://jp.mathworks.com/help/matlab/import_export/importing-xml-documents.html?s_tid=srchtitle ご教授いただけると幸いです。 version="1.0" ? Version="1.0.0" Min="112" No="1" No>1</No Protect>False</Protect ChNameJp>AAAA</ChNameJp Comment</Comment> /Ch No="2" No>2</No Protect>False</Protect ChNameJp>BBBB</ChNameJp Comment</Comment> /Ch /Voltage Min="4" No="1" No>1</No Protect>False</Protect ChNameJp>CCCC</ChNameJp Comment</Comment> /Ch /Frequency Min="0" Use="False" Boudrate="0" No="1" No>1</No Protect>False</Protect ChNameJp>1=A1_0</ChNameJp Commentコント</Comment> /Ch No="2" No>2</No Protect>False</Protect ChNameJp</ChNameJp> Comment</Comment> /Ch /TTT1 /Setting

  3 Comments

michio
michio on 24 Sep 2020 at 6:55
xml ファイル自体を質問本文でなくファイルで添付頂けるとサンプルコードも作りやすいかと思いますが可能でしょうか?
Shinij Kumagai
Shinij Kumagai on 24 Sep 2020 at 12:05
ご連絡いただきありがとうございます。ご支援いただけること感謝します。
ファイルを添付いたします。
親要素、子要素、孫要素のXML文になっています。
親要素毎に、孫要素(ChNameJp)を抽出して、親要素をグループ名として、孫要素リストを作りたいです。
よろしくお願いします。
michio
michio on 24 Sep 2020 at 18:51
ファイルを添付頂きありがとうございます。以下の回答に記載したのコードでは Living.txt で一部 /Ch で閉じられていない部分があったので修正して使用しました。

Sign in to comment.

Accepted Answer

michio
michio on 24 Sep 2020 at 18:49
まずは参考まで、R2020b で使える readstruct という関数で xml ファイルを処理しやすいのでもし使用できる環境でしたらバージョンアップも検討ください。
>> t = readstruct('Living.txt','FileType','xml')
t =
フィールドをもつ struct:
VersionAttribute: "1.0.0"
fruits: [1×1 struct]
Meat: [1×1 struct]
Veg: [1×1 struct]
house: [1×1 struct]
>> struct2table(t.fruits.Ch)
ans =
3×7 table
NoAttribute No UnitComment Protect ChNameJp ChNameEn Comment
___________ __ ___________ _______ ________ ________ _______
1 1 "青森" "False" "Apple" "Apple" "赤"
2 2 "秋田" "False" "Banana" "Banana" "黄"
3 3 "山梨" "False" "Peach" "Peach" "Peach"
>> struct2table(t.Meat.Ch)
ans =
3×7 table
NoAttribute No UnitComment Protect ChNameJp ChNameEn Comment
___________ __ ___________ _______ _________ _________ _______
1 1 "熊本" "False" "Basashi" "Basashi" "赤"
2 2 "富士" "False" "Basashi" "Basashi" "赤"
5 5 "NA" "" "" "" ""
>> struct2table(t.Veg.Ch)
ans =
1×7 table
NoAttribute No UnitComment Protect ChNameJp ChNameEn Comment
___________ __ ___________ _______ ________ ________ _______
1 1 "香川" "False" "1R=6K" "6K" "緑"
>> struct2table(t.house.Ch)
ans =
2×8 table
NoAttribute No Comment1 UnitComment Protect ChNameJp ChNameEn Comment
___________ __ ________ ___________ _______ ________ ________ _______
1 1 "緑2" "鹿児島" "False" "2R=5K" "5K" "緑"
2 2 "緑2" "北海道" "False" "1R=5K" "5K" "緑"

  5 Comments

Show 2 older comments
Shinij Kumagai
Shinij Kumagai on 25 Sep 2020 at 11:13
ご回答いただきありがとうございます。
T=xml2struct('**')とした後、T.Children(i),Children(k).data
というように関数を作ればよろしいでしょうか?
それとも、getElementsByTagNameを使って、直接、ChNameJpにアクセスすることは可能でしょうか?
また、バージョン2015sSP1だと「xml2struct」は、実装されていませんか?
お手数をおかけしますが、よろしくお願いします。
michio
michio on 25 Sep 2020 at 21:55
xml2struct 関数は以下からダウンロードして R2015aSP1 でも使えるのでぜひ試してみてください。
構造体として xml ファイルの内容を採ってきますので、そこから ChNameJp に該当する情報を抜き出す作業が必要ですが、getElementByTagName で操作するより楽だと思いご紹介いたしました。
どうしても getElementsByTagName で・・という事であれば試してみますが少し大変そうでしたので・・。すいません。
Shinij Kumagai
Shinij Kumagai on 26 Sep 2020 at 4:53
ありがとうございます。無事に実行できました。プログラムの処理時間も大変早く、満足しています。大変、助かりました。今後とも、よろしくお願いします。

Sign in to comment.

More Answers (0)

Tags

Products


Release

R2015a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!