車の情報まとめアプリ08(車両情報の登録_Webからxmlファイルへの追加)

■Xmlで情報を登録する。
前回までで情報の表示について見てきた。今回登録の方法について見てみる。
車両情報はxmlファイルで保存しているため、Chromeなどのブラウザから情報を入力して、xml形式に変換した上でファイルに保存する流れ。
xmlファイルの構造は、下のように、<VehicleInfoList>がxmlファイルの中で1つだけのルートで、その子ノードとして<Vehicle></Vehicle>の構造の繰り返しとなる。これをブラウザから入力する(一部自動で入力)。

<VehicleInfoList>
  <Vehicle>
    <ID>001-202212</ID> → 自動入力(連番+年月YYYYMM)
    <Brand>TOYOTA</Brand> → ドロップダウンリストで選択
    <VehicleName>ピクシス エポック</VehicleName> → テキストボックス
    <VehicleCategory>kei-car</VehicleCategory> → ドロップダウンリストで選択
    <MinPrice>860200</MinPrice> → テキストボックス
    <VehicleType>5BA-LA350A-GBRF</VehicleType> → テキストボックス

    <VehicleSpec>
      <Length>3395</Length> → テキストボックス
      <Width>1475</Width> → テキストボックス
      <PersonCapacity>4</PersonCapacity> → テキストボックス
      <EngineCapacity>0.658</EngineCapacity> → テキストボックス
      <MaxPowerOutputkW>36</MaxPowerOutputkW> → テキストボックス
      <MaxTorqueNm>57</MaxTorqueNm> → テキストボックス
      <FuelCapacity>28</FuelCapacity> → テキストボックス
      <FuelConsumptionJC08>35.2</FuelConsumptionJC08> → テキストボックス
      <Speciality>大人の毎日に、安心スモール</Speciality> → テキストボックス
    </VehicleSpec>
  </Vehicle>

  <Vehicle>
 … (以下繰り返し)

作った後の入力画面が下のもの。一番下のボタンで入力のコード(さらに下のButton1_Clickの部分)を実行。

ブラウザでの入力後に、ドロップダウンリストやテキストボックスの入力内容を文字列(String)にまとめて、これをXElementオブジェクトにし既存のデータに追加する。
下のコードのように、xmlファイルの要素の部分を直接の書き込んで、XElementのParseで文字列からXElementへ変換。その後に、Addでデータに追加しSaveでファイルとして保存。

    Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Dim folderpath = Server.MapPath(".\")
        Dim xdoc = XElement.Load(folderpath + "\App_Data\VehicleInfoList.xml")

        Dim lastVehicleNode As XElement = xdoc.LastNode
        Dim ID_lastNode = lastVehicleNode.Descendants("ID")
        Dim IDnumber = Val(Left(ID_lastNode.Value, 3)) + 1
        Dim ID = Format(IDnumber, "000") + "-" + Format(Date.Now(), "yyyyMM")

        Dim Brand = DropDownList1.Text
        Dim VehicleName = TextBox1.Text
        Dim VehicleCategory = DropDownList2.Text
        Dim MinPrice = TextBox2.Text
        Dim VehicleType = TextBox3.Text
        Dim Length = TextBox4.Text
        Dim Width = TextBox5.Text
        Dim PersonCapacity = TextBox6.Text
        Dim EngineCapacity = TextBox7.Text
        Dim MaxPowerOutputkW = TextBox8.Text
        Dim MaxTorqueNm = TextBox9.Text
        Dim FuelCapacity = TextBox10.Text
        Dim FuelConsumptionJC08 = TextBox11.Text
        Dim Speciality = TextBox12.Text

        Dim vehicleInfoStr = "<Vehicle>" + "<ID>" + ID + "</ID>" +
        "<Brand>" + Brand + "</Brand>" +
        "<VehicleName>" + VehicleName + "</VehicleName>" +
        "<VehicleCategory>" + VehicleCategory + "</VehicleCategory>" +
        "<MinPrice>" + MinPrice + "</MinPrice>" +
        "<VehicleType>" + VehicleType + "</VehicleType>" + "<VehicleSpec>" +
        "<Length>" + Length + "</Length>" +
        "<Width>" + Width + "</Width>" +
        "<PersonCapacity>" + PersonCapacity + "</PersonCapacity>" +
        "<EngineCapacity>" + EngineCapacity + "</EngineCapacity>" +
        "<MaxPowerOutputkW>" + MaxPowerOutputkW + "</MaxPowerOutputkW>" +
        "<MaxTorqueNm>" + MaxTorqueNm + "</MaxTorqueNm>" +
        "<FuelCapacity>" + FuelCapacity + "</FuelCapacity>" +
        "<FuelConsumptionJC08>" + FuelConsumptionJC08 + "</FuelConsumptionJC08>" +
        "<Speciality>" + Speciality + "</Speciality>" +
        "</VehicleSpec>" + "</Vehicle>"

        Dim vehicleInfoXml As XElement
        vehicleInfoXml = XElement.Parse(vehicleInfoStr)

        xdoc.Add(vehicleInfoXml)

        Try
            xdoc.Save(folderpath + "\App_Data\VehicleInfoList.xml")
            MsgBox("Complete" & vbCrLf & vbCrLf & vehicleInfoStr)
        Catch ex As Exception
            MsgBox("Error")
        End Try

    End Sub

実際にRegisterボタンを押すと、連番としているID部分が1つずつ増えていき、xmlファイルを見ると情報が追加されているよう。

Xmlの操作には、XElement, XDocument, XmlElementなどいろいろなオブジェクトがあるので、別に定番みたいな書き込み方があるかもしれないけど、動いたので良しにする。