|
はじめまして、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のフォーマットの変更は自身では許可されません。
アドバイス頂ければ助かります。宜しくお願いします。
|
|