以前の質問が上手く反映されていなかったので、再度、投稿させていただきました。 下記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 Kommentare

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

Melden Sie sich an, um zu kommentieren.

 Akzeptierte Antwort

michio
michio am 24 Sep. 2020

0 Stimmen

まずは参考まで、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 Kommentare

Shinij Kumagai
Shinij Kumagai am 24 Sep. 2020
御支援頂きありがとうございます。2020bにバージョンアップができないため、2015bのバージョンで対応したいのですが、難しいでしょうか?お手数をおかけしてすみません。
michio
michio am 25 Sep. 2020
Bearbeitet: michio am 25 Sep. 2020
R2020a 以前のバージョンですと
で公開されている関数はいかがでしょうか?構造体に読み込んだあとの処理は依然として必要ですが、xmlread 関数から試行錯誤するよりは手軽かと思いました。
がベースになっています。
Shinij Kumagai
Shinij Kumagai am 25 Sep. 2020
Bearbeitet: Shinij Kumagai am 25 Sep. 2020
ご回答いただきありがとうございます。
T=xml2struct('**')とした後、T.Children(i),Children(k).data
というように関数を作ればよろしいでしょうか?
それとも、getElementsByTagNameを使って、直接、ChNameJpにアクセスすることは可能でしょうか?
また、バージョン2015sSP1だと「xml2struct」は、実装されていませんか?
お手数をおかけしますが、よろしくお願いします。
michio
michio am 25 Sep. 2020
xml2struct 関数は以下からダウンロードして R2015aSP1 でも使えるのでぜひ試してみてください。
構造体として xml ファイルの内容を採ってきますので、そこから ChNameJp に該当する情報を抜き出す作業が必要ですが、getElementByTagName で操作するより楽だと思いご紹介いたしました。
どうしても getElementsByTagName で・・という事であれば試してみますが少し大変そうでしたので・・。すいません。
Shinij Kumagai
Shinij Kumagai am 26 Sep. 2020
ありがとうございます。無事に実行できました。プログラムの処理時間も大変早く、満足しています。大変、助かりました。今後とも、よろしくお願いします。

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Produkte

Version

R2015a

Tags

Community Treasure Hunt

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

Start Hunting!