0

Mysql データベースに保存されたデータからフラッシュ プレーヤーでビデオのリストを動的に表示する大学プロジェクトのページを作成しようとしています。プレーヤーは単純な XML リストから正しく実行されていますが、データベースから適切なデータを取得して XML リストに変換し、現在選択されているビデオに従ってプレイリストを表示する必要があります。

XML リストは次のようになります。

 <?xml version="1.0" encoding="utf-8"?> 
<item> 
   <list name="A really awesome video of Declan's face." videotitle="Declan Video" link="0001.flv" > 
       <thumb>thumb/1.jpg</thumb> 
   </list> 
   <list name="Test content - Video of Wenlong and Jing" videotitle="Final matrix demo 2" link="test1.flv" > 
       <thumb>thumb/2.jpg</thumb> 
   </list> 
   <list name="Video of Wenlong and Jing" videotitle="Matrix film demo 1" link="test2.flv" > 
       <thumb>thumb/1.jpg</thumb> 
   </list> 
   <list name="Video of Wenlong and Jing" videotitle="Final matrix demo 2" link="test4.flv" > 
       <thumb>thumb/2.jpg</thumb> 
   </list> 
   <list name="Video of Wenlong and Jing" videotitle="Matrix film demo 1" link="wenlong1.flv" > 
       <thumb>thumb/1.jpg</thumb> 
   </list> 

   </list> 


</item>

これを最もよく達成する方法についてのアイデアはありますか? 助けていただければ幸いです。

ありがとう!

4

1 に答える 1

1

結果セットから XDocument を使用して手動で XML ファイルを作成しようとしましたか?

ここでは、MySql サーバーからデータを取得するためのサンプル コードを提供していません。また、mysql データ ストアを読み取るためのパラメーターが必要な例も提供していません。情報がほとんどなくても、(特定の列名を持つ) データ テーブルを取得し、単純な形式の xml ドキュメントを返す基本的なメソッドを提供できます。

public static XDocument CreatePlaylist(System.Data.DataTable DataTable)
        {
            var xDoc = new XDocument(new XDeclaration("1.0", "utf-8", "yes"));
            var xItem = new XElement("item");
            foreach (var row in DataTable.Rows.OfType<System.Data.DataRow>())
                xItem.Add(new XElement("list",
                            new XAttribute("name", row["name"].ToString()),
                            new XAttribute("videotitle", row["videotitle"].ToString()),
                            new XAttribute("link", row["link"].ToString()),
                            new XElement("thumb", row["thumb"].ToString())));
            xDoc.Add(xItem);
            return xDoc;
        }

この小さなスニペットは単純です。データテーブルをパラメーターとして受け入れ、XDocument を作成するだけです。ここでの要件は、データテーブルに name、videotitle、link、thumb という列が必要です。

XDocument オブジェクトを返すこのメソッドを呼び出すだけで、XDocument の .ToString() メソッドを呼び出して xml を取得できます。ただし、落とし穴があります (常に落とし穴があります)。.ToString() メソッドが呼び出されたときに、XDocument に Xml 宣言が含まれていません。.Save() メソッドを呼び出すと、Xml 宣言が出力されます。

XDocument を Xml 宣言をそのままにして文字列に出力できる別の簡単な方法があります。これらの方法は次のとおりです。

public static string XDocToStringWithDeclaration(XDocument doc)
        {
            string xString;
            using (var sw = new System.IO.MemoryStream())
            {
                using (var strw = new System.IO.StreamWriter(sw, System.Text.UTF8Encoding.UTF8))
                {
                    doc.Save(strw);
                    xString = System.Text.UTF8Encoding.UTF8.GetString(sw.ToArray());
                }
            }
            return xString;
        }

メソッドは xDocument の Save() メソッドを呼び出しますが、それを MemoryStream に保存してから、メモリストリームを文字列として出力することがわかります。

すべてを結び付けるために、単純なコンソール アプリケーションを用意しました。これを見て、すべてがどのように組み合わされているかを理解してください。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var dt = new System.Data.DataTable();
            dt.Columns.Add("name");
            dt.Columns.Add("videotitle");
            dt.Columns.Add("link");
            dt.Columns.Add("thumb");

            for (int i = 0, j = 5; i <= j; i++)
            {
                var row = dt.NewRow();
                row["name"] = string.Format("video {0}", i);
                row["videotitle"] = string.Format("video {0}", i);
                row["link"] = string.Format("/someurl/video{0}.avi", i);
                row["thumb"] = string.Format("/someurl/video{0}.png", i);
                dt.Rows.Add(row);
            }
            var xmlDoc = CreatePlaylist(dt);

            Console.WriteLine(XDocToStringWithDeclaration(xmlDoc));


            Console.WriteLine("{0}Finished... Press a key", Environment.NewLine);
            Console.ReadKey();

        }

        public static string XDocToStringWithDeclaration(XDocument doc)
        {
            string xString;
            using (var sw = new System.IO.MemoryStream())
            {
                using (var strw = new System.IO.StreamWriter(sw, System.Text.UTF8Encoding.UTF8))
                {
                    doc.Save(strw);
                    xString = System.Text.UTF8Encoding.UTF8.GetString(sw.ToArray());
                }
            }
            return xString;
        }

        public static XDocument CreatePlaylist(System.Data.DataTable DataTable)
        {
            var xDoc = new XDocument(new XDeclaration("1.0", "utf-8", "yes"));
            var xItem = new XElement("item");
            foreach (var row in DataTable.Rows.OfType<System.Data.DataRow>())
                xItem.Add(new XElement("list",
                            new XAttribute("name", row["name"].ToString()),
                            new XAttribute("videotitle", row["videotitle"].ToString()),
                            new XAttribute("link", row["link"].ToString()),
                            new XElement("thumb", row["thumb"].ToString())));
            xDoc.Add(xItem);
            return xDoc;
        }
    }
}

これが役立つことを願っています。

乾杯、ニコ

于 2012-05-16T06:26:02.473 に答える