VBAでXML作成

経産省のサイトから「b2020_weight1j.xlsx」をダウンロードし、このエクセルシートの「2020_C01 (J1)」シートをClass & Collectionにしてみたが階層構造なのでXMLにしておくと便利かと考えた。

ExcelデータをXMLに変換するにはいろいろと正しい方法があると思う。スキーマを作ってXMLMAPSで追加するなど、、、。今回、XMLに変換する目的はサーバーでPHPで読み取って表示するというだけなので、以前から行っているように、スキーマなしでシンプルにテキストファイルを出力することで作成する。
ただし、この方法では、asciiで作成されるので、作成後メモ帳で読み込んで、UTF-8で上書き保存する。

参考までに、Class & Collectionをシートに展開したものをExcelのWeb保存でHTMLにしてみた。比較できる。

テキスト出力 VBA

Private Sub XmlCreate()
    Dim tItems As colItems
    Dim tItem As clsItem
    Dim svLevel As Integer              '前のデータのレベル
    
    Set tItems = tManage.colItems
    svLevel = 0
    On Error Resume Next
    Kill ActiveWorkbook.Path & "\iipxml.xml"
    On Error GoTo 0
    Open ActiveWorkbook.Path & "\iipxml.xml" For Output As #1
        'XMLのヘッダー
        Print #1, "<?xml version=""1.0"" encoding=""UTF-8""?>"
        'ルート
        Print #1, "<IIP>"
        '
        For Each tItem In tItems
            With tItem
                'Levelが同じ場合はLevel0以外では、まず、閉じタグを追加
                If svLevel = .Level Then
                    Select Case .Level
                        Case Is = 0
                            Print #1, vbTab & "<Level0>"
                            Print #1, vbTab & vbTab & "<Id>" & .Id & "</Id>"
                            Print #1, vbTab & vbTab & "<Name>" & .Name & "</Name>"
                        Case Is = 1
                            Print #1, vbTab & vbTab & "</Level1>"
                            Print #1, vbTab & vbTab & "<Level1>"
                            Print #1, vbTab & vbTab & vbTab & "<Id>" & .Id & "</Id>"
                            Print #1, vbTab & vbTab & vbTab & "<Name>" & .Name & "</Name>"
                        Case Is = 2
                            Print #1, vbTab & vbTab & vbTab & "</Level2>"
                            Print #1, vbTab & vbTab & vbTab & "<Level2>"
                            Print #1, vbTab & vbTab & vbTab & vbTab & "<Id>" & .Id & "</Id>"
                            Print #1, vbTab & vbTab & vbTab & vbTab & "<Name>" & .Name & "</Name>"
                        Case Is = 3
                             Print #1, vbTab & vbTab & vbTab & vbTab & "</Level3>"
                            If .CountChildren > 0 Then
                                Print #1, vbTab & vbTab & vbTab & vbTab & "<Level3>"
                                Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & "<Id>" & .Id & "</Id>"
                                Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & "<Name>" & .Name & "</Name>"
                            End If
                        Case Is = 4
                            Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & "</Level4>"
                            'Level4で下位の階層がないものは対象からはずす
                            If .CountChildren > 0 Then
                                Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & "<Level4>"
                                Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<Id>" & .Id & "</Id>"
                                Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<Name>" & .Name & "</Name>"
                            End If
                        Case Is = 5
                            Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "</Level5>"
                            'Level5で下位の階層がある場合はLevel6があるのでId Nameのみ
                            If .CountChildren > 0 Then
                                Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<Level5>"
                                Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<Id>" & .Id & "</Id>"
                                Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<Name>" & .Name & "</Name>"
                            '下位階層がない場合は、ウェイトなど出力
                            Else
                                Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<Level5>"
                                Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<Id>" & .Id & "</Id>"
                                Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<Name>" & .Name & "</Name>"
                                Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<参考分類>" & .RefCtg & "</参考分類>"
                                Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<財分類>" & .FinancialCtg & "</財分類>"
                                Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<用途分類>" & .PurposeCtg & "</用途分類>"
                                Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<単位>" & .Unit & "</単位>"
                                Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<生産weight>" & .ProductW & "</生産weight>"
                                Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<出荷weight>" & .ShipW & "</出荷weight>"
                                Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<在庫weight>" & .InventoryW & "</在庫weight>"
                                Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<在庫率weight>" & .RationW & "</在庫率weight>"
                                Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<親Id>" & .ParentId & "</親Id>"
                                Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<Level>" & .Level & "</Level>"
                            End If
                            'Level6があれば出力
                        Case Else
                            Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "</Level6>"
                            Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<Level6>"
                            Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<Id>" & .Id & "</Id>"
                            Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<Name>" & .Name & "</Name>"
                            Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<参考分類>" & .RefCtg & "</参考分類>"
                            Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<財分類>" & .FinancialCtg & "</財分類>"
                            Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<用途分類>" & .PurposeCtg & "</用途分類>"
                            Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<単位>" & .Unit & "</単位>"
                            Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<生産weight>" & .ProductW & "</生産weight>"
                            Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<出荷weight>" & .ShipW & "</出荷weight>"
                            Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<在庫weight>" & .InventoryW & "</在庫weight>"
                            Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<在庫率weight>" & .RationW & "</在庫率weight>"
                            Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<親Id>" & .ParentId & "</親Id>"
                            Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<Level>" & .Level & "</Level>"
                    End Select
                'Levelが変更された場合は、前のLevelから対象となる階層分の閉じタグを追加。(4の次が2なら3も閉じる)
                Else
                    
                    Select Case .Level
                        Case Is = 1
                            Select Case svLevel
                                Case Is = 6
                                    Print #1, vbTab & "</Level6></Level5></Level4></Level3></Level2></Level1>"
                                Case Is = 5
                                    Print #1, vbTab & "</Level5></Level4></Level3></Level2></Level1>"
                                Case Is = 4
                                    Print #1, vbTab & "</Level4></Level3></Level2></Level1>"
                                Case Is = 3
                                    Print #1, vbTab & "</Level3></Level2></Level1>"
                                Case Is = 2
                                    Print #1, vbTab & "</Level2></Level1>"
                            End Select
                            Print #1, vbTab & "<Level1>"
                            Print #1, vbTab & vbTab & "<Id>" & .Id & "</Id>"
                            Print #1, vbTab & vbTab & "<Name>" & .Name & "</Name>"
                            svLevel = .Level
                        Case Is = 2
                            Select Case svLevel
                                Case Is = 6
                                    Print #1, vbTab & vbTab & "</Level6></Level5></Level4></Level3></Level2>"
                                Case Is = 5
                                    Print #1, vbTab & vbTab & "</Level5></Level4></Level3></Level2>"
                                Case Is = 4
                                    Print #1, vbTab & vbTab & "</Level4></Level3></Level2>"
                                Case Is = 3
                                    Print #1, vbTab & vbTab & "</Level3></Level2>"
                            End Select
                            Print #1, vbTab & vbTab & "<Level2>"
                            Print #1, vbTab & vbTab & vbTab & "<Id>" & .Id & "</Id>"
                            Print #1, vbTab & vbTab & vbTab & "<Name>" & .Name & "</Name>"
                            svLevel = .Level
                        Case Is = 3
                            If .CountChildren > 0 Then
                                Select Case svLevel
                                    Case Is = 6
                                        Print #1, vbTab & vbTab & vbTab & "</Level6></Level5></Level4></Level3>"
                                    Case Is = 5
                                        Print #1, vbTab & vbTab & vbTab & "</Level5></Level4></Level3>"
                                    Case Is = 4
                                        Print #1, vbTab & vbTab & vbTab & "</Level4></Level3>"
                                    Case Is = 1
                                    Print #1, vbTab & vbTab & vbTab & "<Level2>"
                                End Select
                                Print #1, vbTab & vbTab & vbTab & "<Level3>"
                                Print #1, vbTab & vbTab & vbTab & vbTab & "<Id>" & .Id & "</Id>"
                                Print #1, vbTab & vbTab & vbTab & vbTab & "<Name>" & .Name & "</Name>"
                                svLevel = .Level
                            End If
                        Case Is = 4
                            If .CountChildren > 0 Then
                                 Select Case svLevel
                                    Case Is = 6
                                        Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & "</Level6></Level5></Level4>"
                                    Case Is = 5
                                        Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & "</Level5></Level4>"
                                    '2の次が4ならLevel3を追加する
                                    Case Is = 2
                                    Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & "<Level3>"
                                    Case Is = 1
                                    Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & "<Level2><Level3>"
                                End Select
                                Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & "<Level4>"
                                Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<Id>" & .Id & "</Id>"
                                Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<Name>" & .Name & "</Name>"
                                svLevel = .Level
                            End If
                         Case Is = 5
                            If .CountChildren > 0 Then
                                Select Case svLevel
                                    Case Is = 6
                                        Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "</Level6></Level5>"
                                    Case Is = 5
                                        Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "</Level5>"
                                    Case Is = 2
                                    Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<Level3><Level4>"
                                    Case Is = 1
                                    Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<Level2><Level3><Level4>"
                                End Select
                                Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<Level5>"
                                Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<Id>" & .Id & "</Id>"
                                Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<Name>" & .Name & "</Name>"
                            Else
                                Select Case svLevel
                                    Case Is = 6
                                        Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "</Level6></Level5>"
                                    Case Is = 5
                                        Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "</Level5>"
                                    Case Is = 2
                                    Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<Level3><Level4>"
                                    Case Is = 1
                                    Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<Level2><Level3><Level4>"
                                End Select
                                Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<Level5>"
                                Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<Id>" & .Id & "</Id>"
                                Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<Name>" & .Name & "</Name>"
                                Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<参考分類>" & .RefCtg & "</参考分類>"
                                Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<財分類>" & .FinancialCtg & "</財分類>"
                                Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<用途分類>" & .PurposeCtg & "</用途分類>"
                                Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<単位>" & .Unit & "</単位>"
                                Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<生産weight>" & .ProductW & "</生産weight>"
                                Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<出荷weight>" & .ShipW & "</出荷weight>"
                                Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<在庫weight>" & .InventoryW & "</在庫weight>"
                                Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<在庫率weight>" & .RationW & "</在庫率weight>"
                                Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<親Id>" & .ParentId & "</親Id>"
                                Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<Level>" & .Level & "</Level>"
                            End If
                            svLevel = .Level
                       Case Else
                            Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<Level6>"
                            Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<Id>" & .Id & "</Id>"
                            Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<Name>" & .Name & "</Name>"
                            Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<参考分類>" & .RefCtg & "</参考分類>"
                            Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<財分類>" & .FinancialCtg & "</財分類>"
                            Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<用途分類>" & .PurposeCtg & "</用途分類>"
                            Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<単位>" & .Unit & "</単位>"
                            Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<生産weight>" & .ProductW & "</生産weight>"
                            Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<出荷weight>" & .ShipW & "</出荷weight>"
                            Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<在庫weight>" & .InventoryW & "</在庫weight>"
                            Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<在庫率weight>" & .RationW & "</在庫率weight>"
                            Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<親Id>" & .ParentId & "</親Id>"
                            Print #1, vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "<Level>" & .Level & "</Level>"
                            svLevel = .Level
                      End Select
                End If
            End With
         Next
         '読み終わったら必要な閉じタグをセット
         Select Case svLevel
            Case Is = 6
                Print #1, vbTab & "</Level6></Level5></Level4></Level3></Level2></Level1></Level0>"
            Case Is = 5
                Print #1, vbTab & "</Level5></Level4></Level3></Level2></Level1></Level0>"
            Case Is = 4
                Print #1, vbTab & "</Level4></Level3></Level2></Level1></Level0>"
            Case Is = 3
                Print #1, vbTab & "</Level3></Level2></Level1></Level0>"
            Case Is = 2
                Print #1, vbTab & "</Level2></Level1></Level0>"
        End Select
        'ルートタグを閉じる
        Print #1, "</IIP>"
    Close #1
End Sub

XML

<?xml version="1.0" encoding="UTF-8"?>
<IIP>
	<Level0>
		<Id>1000000000</Id>
		<Name>鉱工業</Name>
	<Level1>
		<Id>1100000000</Id>
		<Name>製造工業</Name>
		<Level2>
			<Id>1101000000</Id>
			<Name>鉄鋼・非鉄金属工業</Name>
			<Level3>
				<Id>1101100000</Id>
				<Name>鉄鋼業</Name>
					<Level4>
						<Id>1101101000</Id>
						<Name>鉄鋼粗製品</Name>
							<Level5>
								<Id>1101101010</Id>
								<Name>銑鉄</Name>
								<参考分類></参考分類>
								<財分類>鉱工業用生産財</財分類>
								<用途分類></用途分類>
								<単位>t</単位>
								<生産weight>13.9</生産weight>
								<出荷weight>6.3</出荷weight>
								<在庫weight>21.3</在庫weight>
								<在庫率weight>0</在庫率weight>
								<親Id>1101101000</親Id>
								<Level>5</Level>
							</Level5>
							<Level5>
								<Id>1101101020</Id>
								<Name>粗鋼</Name>
								<参考分類></参考分類>
								<財分類>鉱工業用生産財</財分類>
								<用途分類></用途分類>
								<単位>t</単位>
								<生産weight>37</生産weight>
								<出荷weight>0.2</出荷weight>
								<在庫weight>16.2</在庫weight>
								<在庫率weight>0</在庫率weight>
								<親Id>1101101000</親Id>
								<Level>5</Level>
							</Level5>
                                                           -----

PHPで表示、クリックして展開するようにしたかったが、労力の割に面倒な感じなので、全件を出力し、別にLevel3までのリストを用意した。こちらのリスト3のIDをクリックすると、全件の該当項目の欄に移動することとした。

PHP

<!DOCTYPE html>
<html lang="ja">

<head>
 <title>IT's AGENT IIPリスト</title>
 <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
 <meta content="ja" http-equiv="Content-Language">
 <meta http-equiv="Pragma" content="no-cache">
 <meta http-equiv="cache-control" content="no-cache" />
 <meta http-equiv="expires" content="0" />
 <meta name="format-detection" content="telephone=no">
 <meta name="description" content="IT's AGENT IIPリスト" />
 <meta name="keywords" content="IT's AGENT IIPリスト" />
 <meta name="author" content="IT's AGENT">
 <meta charset="utf-8">
 <meta name="viewport" content="target-densitydpi=device-dpi, width=device-width, initial-scale=1,user-scalable=yes">
 <link rel="stylesheet" href="css/general.css">
</head>

<body>
 <div class="title">IPI 2020_C01(J1) ALL</div>
 <div id="contentsmaster">
  <div id="centerpain">
   <section>
    <div class="boxcenter">
     <article>
      <div>
       <div style="text-align:center;width:55rem;display:inline-block"></div>
       <div style="text-align:center;width:14rem;display:inline-block">単位</div>
       <div style="text-align:center;width:5rem;display:inline-block"></div>
       <div style="text-align:right;width:10rem;display:inline-block">生産weight</div>
       <div style="text-align:right;width:10rem;display:inline-block">出荷weight</div>
       <div style="text-align:right;width:10rem;display:inline-block">在庫weight</div>
       <div style="text-align:right;width:10rem;display:inline-block">在庫率weight</div>
      </div>
<?php
$xml = "iipxml.xml";
$xmlData = simplexml_load_file($xml);
foreach ($xmlData->Level0 as $data) {
 echo '<div class="level0"><div style="display:inline-block">' . trim($data->Id) . '</div><div style="display:inline-block;margin-left:2rem">' . trim($data->Name) . '</div></div>';
 foreach ($data->Level1 as $data1) {
  echo '<div class="level1"><div style="display:inline-block">' . trim($data1->Id) . '</div><div style="display:inline-block;margin-left:2rem">' . trim($data1->Name) . '</div></div>';
  if ($data1->Level2) {
   foreach ($data1->Level2 as $data2) {
    echo '<div class="level2" id="' . trim($data2->Id) . '"><div style="display:inline-block">' . trim($data2->Id) . '</div><div style="display:inline-block;margin-left:2rem">' . trim($data2->Name) . '</div></div>';
    if ($data2->Level3) {
     foreach ($data2->Level3 as $data3) {
      if (trim($data3->Id) <> "") {
       echo '<div class="level3" id="' . trim($data3->Id) . '"><div style="display:inline-block">' . trim($data3->Id) . '</div><div style="display:inline-block;margin-left:2rem">' . trim($data3->Name) . '</div></div>';
      } else {
       echo '<div class="level3"><div style="display:inline-block">********</div><div style="display:inline-block;margin-left:2rem">********</div></div>';
      }
      if ($data3->Level4) {
       foreach ($data3->Level4 as $data4) {
        if (trim($data4->Id) <> "") {
         echo '<div class="level4"><div style="display:inline-block">' . trim($data4->Id) . '</div><div style="display:inline-block;margin-left:2rem">' . trim($data4->Name) . '</div></div>';
        }
        if ($data4->Level5) {
         foreach ($data4->Level5 as $data5) {
          if ($data5->Level6) {
           echo '<div class="level5"><div style="display:inline-block">' . trim($data5->Id) . '</div><div style="display:inline-block;margin-left:2rem">' . trim($data5->Name) . '</div></div>';
           foreach ($data5->Level6 as $data6) {
            echo '<div class="level6"><div style="display:inline-block">' . trim($data6->Id) . '</div><div style="display:inline-block;;width:38rem;margin-left:2rem">' . trim($data6->Name) . '</div>';
            echo '<div style="display:inline-block; width:14rem">' . trim($data6->単位) . '</div>';
            echo '<div style="display:inline-block; width:10rem;text-align:right">' . number_format((int)$data6->生産weight, 1, '.', '') . '</div>';
            echo '<div style="display:inline-block; width:10rem;text-align:right">' . number_format((int)$data6->出荷weight, 1, '.', '') . '</div>';
            echo '<div style="display:inline-block; width:10rem;text-align:right">' . number_format((int)$data6->在庫weight, 1, '.', '') . '</div>';
            echo '<div style="display:inline-block; width:10rem;text-align:right">' . number_format((int)$data6->在庫率weight, 1, '.', '') . '</div></div>';
           }
          } else {
           echo '<div class="level5"><div style="display:inline-block">' . trim($data5->Id) . '</div><div style="display:inline-block;width:40rem;margin-left:2rem">' . trim($data5->Name) . '</div>';
           echo '<div style="display:inline-block; width:14rem">' . trim($data5->単位) . '</div>';
           echo '<div style="display:inline-block; width:10rem;text-align:right">' . number_format((int)$data5->生産weight, 1, '.', '') . '</div>';
           echo '<div style="display:inline-block; width:10rem;text-align:right">' . number_format((int)$data5->出荷weight, 1, '.', '') . '</div>';
           echo '<div style="display:inline-block; width:10rem;text-align:right">' . number_format((int)$data5->在庫weight, 1, '.', '') . '</div>';
           echo '<div style="display:inline-block; width:10rem;text-align:right">' . number_format((int)$data5->在庫率weight, 1, '.', '') . '</div></div>';
          }
         }
        }
       }
      }
     }
    }
   }
  }
 }
}
?>
     </article>
    </div>
   </section>
  </div>
 </div>
</body>

</html>

CSS

html{
	font-size: 62.5%;
}

body{
	font-size: 14px;
	font-size: 1.4rem;
	background-color:white;
	font-family:"游ゴシック Medium", "Yu Gothic Medium", 游ゴシック体, 'Yu Gothic', YuGothic, 'Hiragino Kaku Gothic ProN', 'ヒラギノ角ゴ ProN W3', Meiryo, メイリオ, Osaka, 'MS PGothic', arial, helvetica, sans-serif;
	color: #000000;
	-webkit-text-size-adjust: 100%;
}

a:link
{
	color:slateblue;
	text-decoration: underline blue;
	box-shadow:1px 2px 6px 1px rgba(72,61,139,0.2);
	padding-right:4px;
	padding-right:0.4rem;
}

a:visited
{
	color:navy;
	text-decoration: underline dashed blueviolet;
}
a:hover
{
	color: red;
	box-shadow:1px 5px 10px 1px rgba(205,92,92,0.6);
	text-decoration: underline wavy red;
	border-radius:3px 3px 3px 3px ;
}
a:active
{
	color: crimson;
	text-decoration: none;
	text-decoration: underline wavy red;
}

div.title{
	text-align: center;
	font-weight: 600;
	font-size: xx-large;
}


div.boxcenter {
	margin: 0px auto;
	display: block;
	width:95%;
	margin-left:6px;
	margin-right:6px;
	margin-top:3px;
	margin-bottom:3px;
	margin-left:0.6rem;
	margin-right:0.6rem;
	margin-top:0.3rem;
	margin-bottom:0.3rem;
	border-bottom:2px solid lightslategray;
	border-top:2px solid gainsboro;
	border-left:1px solid lavender;
	border-right:1px solid darkgray;
	background-image:none;
	background-color:white;
}

div.level0{
	line-height:24px;
	line-height:2.4rem;
	background-color:gainsboro;
	text-shadow:2px 2px 3px rgba(140,160,220,0.5);
	color:#000000;
	font-weight: 600;
	vertical-align:top;
	margin-left:2rem;
	font-size: large;
}

div.level1{
	line-height:24px;
	line-height:2.4rem;
	background-color:lightsteelblue;
	text-shadow:2px 2px 3px rgba(140,160,220,0.5);
	color:#000040;
	font-weight: 600;
	vertical-align:top;
	margin-left:4rem;
	font-size: larger;
}

div.level2{
	line-height:24px;
	line-height:2.4rem;
	background-color:lavender;
	text-shadow:2px 2px 3px rgba(140,160,220,0.5);
	color:#000080;
	font-weight: 600;
	vertical-align:top;
	margin-left:6rem;
}

div.level3{
	line-height:24px;
	line-height:2.4rem;
	text-decoration: underline blue;
	color:#0000f0;
	font-weight: 600;
	vertical-align:top;
	margin-left:8rem;
}

div.level4{
	line-height:24px;
	line-height:2.4rem;
	text-shadow:2px 2px 3px rgba(140,160,220,0.5);
	color:#004f00;
	font-weight: 600;
	vertical-align:top;
	margin-left:10rem;
}

div.level5{
	line-height:24px;
	line-height:2.4rem;
	color:#030303;
	font-weight: 300;
	vertical-align:top;
	margin-left:12rem;
}

div.level6{
	line-height:24px;
	line-height:2.4rem;
	color:#0f0f0f;
	font-weight: 300;
	vertical-align:top;
	margin-left:14rem;
}