我正在尝试为一个大学项目创建一个页面,该页面从存储在Mysql数据库中的数据在flash播放器中动态显示视频列表。我已经从一个简单的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>有没有关于如何最好地实现这一点的想法?我们将非常感谢您的帮助。
谢谢!
发布于 2012-05-16 14:26:02
您是否尝试过从结果集中使用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;
}这个小片段很简单,它只接受datatable作为参数,然后为您创建一个XDocument。现在的要求是datatable必须具有列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;
}
}
}我希望这能帮到你。
干杯,尼科
https://stackoverflow.com/questions/10612684
复制相似问题