Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


235 / 13645 ツリー ←次へ | 前へ→

【81366】名前空間のあるxmlデータの抽出 Bernoulli 20/6/24(水) 7:08 質問[未読]
【81384】Re:名前空間のあるxmlデータの抽出 γ 20/7/13(月) 17:14 回答[未読]
【81385】Re:名前空間のあるxmlデータの抽出 Bernoulli 20/7/13(月) 17:31 お礼[未読]

【81366】名前空間のあるxmlデータの抽出
質問  Bernoulli  - 20/6/24(水) 7:08 -

引用なし
パスワード
   はじめまして、vba初心者の者です。
既存のxmlファイルをvbaにてExcelへ処理したいのですが、以下にある名前空間の無いxmlの各TimeDefine値をExcelセルへ取得できました。しかし、名前空間のあるxmlではそのままでは取得できませんでした。名前空間の定義の仕方やプロパティ記述方法が分からず困っています。

・サンプルvba
Public Sub sample()
Dim XMLDocument As MSXML2.DOMDocument60
Dim xmlDate As IXMLDOMNode
Dim xmlCustomer As IXMLDOMNode
Dim xmlDataNode As IXMLDOMNode

On Error GoTo ERROR_

Set XMLDocument = New MSXML2.DOMDocument60
XMLDocument.async = False

Dim dir As String
dir = ActiveWorkbook.Path

XMLDocument.Load (dir + "\sample.xml")

If (XMLDocument.parseError.ErrorCode <> 0) Then
MsgBox (XMLDocument.parseError.reason)
GoTo ERROR_
End If

Set xmlDataNode = XMLDocument.SelectSingleNode("//Report/Time")
Dim Node As IXMLDOMNode

Dim nodeko As Integer

nodeko = 1

For Each Node In xmlDataNode.ChildNodes

Cells(nodeko + 1, 1) = Node.ChildNodes(0).Text
Cells(nodeko + 1, 2) = Node.ChildNodes(1).Text
Cells(nodeko + 1, 3) = Node.ChildNodes(2).Text
Cells(nodeko + 1, 4) = Node.ChildNodes(3).Text

nodeko = nodeko + 1

Next

ERROR_:

If Not XMLDocument Is Nothing Then Set XMLDocument = Nothing
If Not xmlDate Is Nothing Then Set xmlDate = Nothing
If Not xmlCustomer Is Nothing Then Set xmlCustomer = Nothing
If Not xmlDataNode Is Nothing Then Set xmlDataNode = Nothing


End Sub


・名前空間の無いxml
<?xml version="1.0" encoding="utf-8"?>
<Report>
<Head>
<Title>天気予報</Title>
<ReportDateTime>2020-06-21T17:00:00+09:00</ReportDateTime>
<TargetDateTime>2020-06-21T17:00:00+09:00</TargetDateTime>
</Head>
<Time>
<TimeDefine timeId="1">
<id>1</id>
<DateTime>2020-06-21T17:00:00+09:00</DateTime>
<Duration>PT7H</Duration>
<Name>今夜</Name>
</TimeDefine>
<TimeDefine timeId="1">
<id>2</id>
<DateTime>2020-06-21T17:00:00+09:00</DateTime>
<Duration>PT7H</Duration>
<Name>今朝</Name>
</TimeDefine>
</Time>
</Report>


・名前空間のあるxml
<?xml version="1.0" encoding="utf-8"?>
<Report xmlns="jmaxml1" xmlns:jmx="jmaxml1" xmlns:jmx_add="addition1">
<Head>
<Title>天気予報</Title>
<ReportDateTime>2020-06-21T17:00:00+09:00</ReportDateTime>
<TargetDateTime>2020-06-21T17:00:00+09:00</TargetDateTime>
</Head>
<Time xmlns="meteorology1" xmlns:jmx_eb="elementBasis1">
<TimeDefine timeId="1">
<id>1</id>
<DateTime>2020-06-21T17:00:00+09:00</DateTime>
<Duration>PT7H</Duration>
<Name>今夜</Name>
</TimeDefine>
<TimeDefine timeId="1">
<id>2</id>
<DateTime>2020-06-21T17:00:00+09:00</DateTime>
<Duration>PT7H</Duration>
<Name>今朝</Name>
</TimeDefine>
</Time>
</Report>

なお、xmlのフォーマットの変更は自身では許可されません。
アドバイス頂ければ助かります。宜しくお願いします。

【81384】Re:名前空間のあるxmlデータの抽出
回答  γ  - 20/7/13(月) 17:14 -

引用なし
パスワード
   こういうドメイン知識を、ExcelVBAの質問掲示板にあげるのはいかがなものかと思います。
ご自分で調べるべきです。

ちなみに、ネット検索したところ、
下記のドキュメントを読むとよいのではないかと思います。
(1)
気象庁XMLとは
ht tps://aitc.jp/events/20130711-Kansai/20130711_111.pdf
(2)
気象庁防災情報XMLフォーマット(本文)[PDF形式:223KB](平成28年3月31日一部修正)
ht tp://xml.kishou.go.jp/jmaxml_20160331_format_v1_2.pdf
(↑そのままだとエラーになるので、あえて半角スペースを入れています。)


動作するものが得られましたが、あえて書きません。

【81385】Re:名前空間のあるxmlデータの抽出
お礼  Bernoulli  - 20/7/13(月) 17:31 -

引用なし
パスワード
   > Y様
固有の情報を投稿してしまいまして、失礼しました。
この件につきましては、当方で調査して参ります。ありがとうございました。

235 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free