0

私は XML の初心者なので、XML 構造について助けが必要です。後で VB.NET で読むために構造を設計するのは間違っている可能性があります。

(これは私がこれについて行う 4 番目の質問のようなものです...しかし、重複していません。それについて包括的に説明してください。私はこれを真剣に受け止めて、自分のメリットでこれを行います。同じことを書くのに飽きています。このトピック。)

アプリケーションで音楽のコレクションを管理できるようにしたいのですが、現在、次のようなタイトルのテキスト ファイル (239 ファイル) がたくさんあります。

90's Dance
2006 Electro
2007 Hardstyle
2013 Pop (English)
2013 Rock (English)
2013 UK Hardcore

ご覧のとおり、Year Musicstyle.txt

さて、各ファイルには次のようなデータが含まれています。

Ab - Stay With Me;320;05:53;13,54
Above & Beyond Feat. Richard Bedford - Sun & Moon (Reaktor Hardcore Remix);320;06:03;13,87
Adrenalin - No Need To Run;320;06:07;14,04
Afrojack & Steve Aoki Feat. Miss Palmer - No Beef (Nobody Bootleg);320;05:45;13,19
Andy Wilson - Forever Loved;192;05:45;7,89

ご覧のとおり、Filename;Bitrate;Duration;SizeInMegabytes

SO の多くの人は、SQL または XML でデータベースを作成するのが最善であると私に言いました。これは、SQL の学習を開始するのが少し難しいように思われるため、私が試していることです。私は XML や SQL について何も知りません。

XML ファイルに必要な構造がわかります。xml ファイルは と で区切る必要がありYearMusicStyleそこに曲の情報を配置します。

VB.NET で xml ファイルを作成するためのチュートリアルを読みましたが、最終的な構造は次のようになります。

<?xml version="1.0" encoding="utf-8"?>
<!--XML Songs Database.-->
<Songs>
  <_2013>
    <Rock>
      <FileName>My Song 1.mp3</FileName>
      <Bitrate>320</Bitrate>
      <Duration>04:55</Duration>
      <Filesize>4,80</Filesize>
      <FileName>My Song 2.mp3</FileName>
      <Bitrate>192</Bitrate>
      <Duration>06:44</Duration>
      <Filesize>8,43</Filesize>
      <FileName>My Song 3.mp3</FileName>
      <Bitrate>128</Bitrate>
      <Duration>05:12</Duration>
      <Filesize>4,20</Filesize>
      <FileName>My Song 4.mp3</FileName>
      <Bitrate>256</Bitrate>
      <Duration>07:32</Duration>
      <Filesize>9,51</Filesize>
    </Rock>
  </_2013>
</Songs>

しかし、その構造は正しくないと思います。わかりませんが、次のような構造を読みやすくすることはできませんか?:

<?xml version="1.0" encoding="utf-8"?>
<!--XML Songs Database.-->
<Songs>
  <_2013>
    <Rock>
      <FileName>My Song 1.mp3</FileName><Bitrate>320</Bitrate><Duration>04:55</Duration><Filesize>4,80</Filesize>
      <FileName>My Song 2.mp3</FileName><Bitrate>192</Bitrate><Duration>06:44</Duration><Filesize>8,43</Filesize>
      <FileName>My Song 3.mp3</FileName><Bitrate>128</Bitrate><Duration>05:12</Duration><Filesize>4,20</Filesize>
      <FileName>My Song 4.mp3</FileName><Bitrate>256</Bitrate><Duration>07:32</Duration><Filesize>9,51</Filesize>
    </Rock>
  </_2013>
</Songs>

問題は次のとおりです。

  1. データベースの要求に最適な構造設計はどれかわかりません。

  2. 私はそれを設計する方法を正確に知らないので、コードと設計を修正するために助けが必要です.

  3. 私はそれを試しましたが、2番目の種類の構造を書くことができません(読みやすいと私が言ったもの)

これは、最初の構造体の種類を記述するために使用しているコードです。

Imports System
Imports System.Xml

Public Class Form1

    ' lets create the MyXML.xml document,
    Dim xmlfile As String = "c:\MyXML.xml"

    ' declare our xmlwriter object
    Dim Xml As XmlWriter = XmlWriter.Create(xmlfile, _
                              New XmlWriterSettings() With {.Indent = True})

    Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown

        ' Write the Xml declaration.
        Write_Start(Xml)

        ' Write a comment.
        Write_Comment(Xml, "XML Songs Database.")

        ' Write the root element.
        Write_Element(Xml, "Songs")

        ' Start our first year element.
        Write_Element(Xml, "_2013")

        ' Start our first music style.
        Xml.WriteStartElement("Rock")

        ' The music style song nodes:
        Write_SongInfo_Node(Xml, "My Song 1.mp3", "320", "04:55", "4,80")
        Write_SongInfo_Node(Xml, "My Song 2.mp3", "192", "06:44", "8,43")
        Write_SongInfo_Node(Xml, "My Song 3.mp3", "128", "05:12", "4,20")
        Write_SongInfo_Node(Xml, "My Song 4.mp3", "256", "07:32", "9,51")

        ' Write the xml end
        Write_End(Xml)

        ' Start the file and exit
        Process.Start(xmlfile) : Application.Exit()

    End Sub


    Private Sub Write_Start(ByVal xml As XmlWriter)
        Xml.WriteStartDocument()
    End Sub

    Private Sub Write_Comment(ByVal xml As XmlWriter, ByVal Comment As String)
        xml.WriteComment(Comment)
    End Sub

    Private Sub Write_Element(ByVal xml As XmlWriter, ByVal element As String)
        xml.WriteStartElement(element)
    End Sub

    Private Sub Write_SongInfo_Node(ByVal xml As XmlWriter,
                      ByVal Filename As String, _
                      ByVal Bitrate As String, _
                      ByVal Duration As String, _
                      ByVal Filesize As String)

        xml.WriteStartElement("FileName")
        xml.WriteString(Filename)
        xml.WriteEndElement()

        xml.WriteStartElement("Bitrate")
        xml.WriteString(Bitrate)
        xml.WriteEndElement()

        xml.WriteStartElement("Duration")
        xml.WriteString(Duration)
        xml.WriteEndElement()

        xml.WriteStartElement("Filesize")
        xml.WriteString(Filesize)
        xml.WriteEndElement()

    End Sub

    Private Sub Write_End(ByVal xml As XmlWriter)
        xml.WriteEndDocument()
        xml.Close()
    End Sub

End Class

アップデート:

私はこのインデントのフォーマットを取得しています:

<?xml version="1.0" encoding="utf-8"?>
<!--XML Songs Database.-->
<Songs>
  <Song>
    <FileName>My Song 1.mp3</FileName>
    <Year>2007</Year>
    <Genre>Dance</Genre>
    <Bitrate>320</Bitrate>
    <Duration>04:55</Duration>
    <Filesize>4,80</Filesize>
  </Song>
  <Song>
    <FileName>My Song 2.mp3</FileName>
    <Year>2009</Year>
    <Genre>Electro</Genre>
    <Bitrate>192</Bitrate>
    <Duration>06:44</Duration>
    <Filesize>8,43</Filesize>
  </Song>
  <Song>
    <FileName>My Song 3.mp3</FileName>
    <Year>2008</Year>
    <Genre>UK Hardcore</Genre>
    <Bitrate>128</Bitrate>
    <Duration>05:12</Duration>
    <Filesize>4,20</Filesize>
  </Song>
  <Song>
    <FileName>My Song 4.mp3</FileName>
    <Year>2013</Year>
    <Genre>Techno</Genre>
    <Bitrate>256</Bitrate>
    <Duration>07:32</Duration>
    <Filesize>9,51</Filesize>
  </Song>
</Songs>

しかし、このフォーマットで「スペース」文字の量を節約し、ファイルサイズを節約したい:

<?xml version="1.0" encoding="utf-8"?>
<!--XML Songs Database.-->
<Songs>
  <Song><FileName>My Song 1.mp3</FileName><Year>2007</Year><Genre>Dance</Genre><Bitrate>320</Bitrate><Duration>04:55</Duration><Filesize>4,80</Filesize></Song>
  <Song><FileName>My Song 2.mp3</FileName><Year>2009</Year><Genre>Electro</Genre><Bitrate>192</Bitrate><Duration>06:44</Duration><Filesize>8,43</Filesize></Song>
  <Song><FileName>My Song 3.mp3</FileName><Year>2008</Year><Genre>UK Hardcore</Genre><Bitrate>128</Bitrate><Duration>05:12</Duration><Filesize>4,20</Filesize></Song>
  <Song><FileName>My Song 4.mp3</FileName><Year>2013</Year><Genre>Techno</Genre><Bitrate>256</Bitrate><Duration>07:32</Duration><Filesize>9,51</Filesize></Song>
</Songs>

これは私がしようとしているものです:

Private Sub Write_SongInfo_Node(ByVal xml As XmlWriter,
                  ByVal Filename As String, _
                  ByVal Year As String, _
                  ByVal Genre As String, _
                  ByVal Bitrate As String, _
                  ByVal Duration As String, _
                  ByVal Filesize As String)

    xml.WriteStartElement("Song")

    ' xml.Settings.Indent = False

    xml.WriteStartElement("FileName")
    xml.WriteString(Filename)
    xml.WriteEndElement()

    xml.WriteStartElement("Year")
    xml.WriteString(Year)
    xml.WriteEndElement()

    xml.WriteStartElement("Genre")
    xml.WriteString(Genre)
    xml.WriteEndElement()

    xml.WriteStartElement("Bitrate")
    xml.WriteString(Bitrate)
    xml.WriteEndElement()

    xml.WriteStartElement("Duration")
    xml.WriteString(Duration)
    xml.WriteEndElement()

    xml.WriteStartElement("Filesize")
    xml.WriteString(Filesize)
    xml.WriteEndElement()

    '  xml.Settings.Indent = True

    xml.WriteEndElement()

End Sub
4

1 に答える 1