您好我有以下c#代码将数据保存到xml文件。
问题是它没有以我正在寻找的格式保存xml,我似乎无法找到一种方法来获取它。
C#代码
string MyConString = "SERVER=localhost;" + "DATABASE=myvideos75;" + "UID=root;" + "PASSWORD=V0lc0m;";
string SQLSelect = "SELECT episode.idShow,tvshow.c00 as 'ShowName',episode.c12 as 'Season',XBMCPathReFact(episode.c18) as 'Path' FROM myvideos75.episode join tvshow on tvshow.idShow = episode.idShow where episode.c13 = 1 order by episode.idShow,episode.c12 ";
string _XMLFile = "test.xml";
MySqlConnection connection = new MySqlConnection(MyConString);
try
{
MySqlCommand _MySqlSelect = new MySqlCommand(SQLSelect, connection);
DataSet _DataSet1 = new DataSet("XBMC");
MySqlDataAdapter _MySqlDataAdapter1 = new MySqlDataAdapter(_MySqlSelect);
_MySqlDataAdapter1.Fill(_DataSet1,"Show");
FileStream myFs = new FileStream(_XMLFile, FileMode.OpenOrCreate, FileAccess.Write);
_DataSet1.WriteXml(myFs);
myFs.Close();
}
catch (Exception ex)
{ MessageBox.Show(ex.Message.ToString()); }
生成的XML
<XBMC>
<Show>
<idShow>1</idShow>
<ShowName>2 Broke Girls</ShowName>
<Season>1</Season>
<Path>\\10.0.0.3\tv\2 Broke Girls\Season1\</Path>
</Show>
<Show>
<idShow>1</idShow>
<ShowName>2 Broke Girls</ShowName>
<Season>2</Season>
<Path>\\10.0.0.3\tv\2 Broke Girls\Season 02\</Path>
</Show>
<Show>
<idShow>31</idShow>
<ShowName>Burn Notice</ShowName>
<Season>2</Season>
<Path>\\10.0.0.3\tv\Burn Notice\Season2\</Path>
</Show>
<Show>
<idShow>31</idShow>
<ShowName>Burn Notice</ShowName>
<Season>3</Season>
<Path>\\10.0.0.3\tv\Burn Notice\Season3\</Path>
</Show>
</XBMC>
我希望它能像这样生成XML。
<XBMC>
<Show>
<idShow>1</idShow>
<ShowName>2 Broke Girls</ShowName>
<Seasons>
<Season>
<Number>1</Number>
<Path>\\10.0.0.3\tv\2 Broke Girls\Season1\</Path>
</Season>
<Season>
<Number>2</Number>
<Path>\\10.0.0.3\tv\2 Broke Girls\Season 02\</Path>
</Season>
</Seasons>
</Show>
<Show>
<idShow>31</idShow>
<ShowName>Burn Notice</ShowName>
<Seasons>
<Season>
<Number>2</Number>
<Path>\\10.0.0.3\tv\Burn Notice\Season2\</Path>
</Season>
<Season>
<Number>3</Number>
<Path>\\10.0.0.3\tv\Burn Notice\Season3\</Path>
</Season>
</Seasons>
</Show>
</XBMC>
SQL select语句返回以下数据
感谢您的时间
答案 0 :(得分:0)
好的,我设法得到了一个解决方案,也许它可以帮助其他有类似问题的人。 我已经添加了一些注释来解释发生了什么。
string MyConString = "SERVER=10.0.0.3;" + "DATABASE=myvideos75;" + "UID=xbmc;" + "PASSWORD=xbmc;";
string SQLSelect = "SELECT tvshow.idShow as 'idShow',tvshow.c00 as 'ShowName',episode.c12 as 'Season',XBMCPathReFact(episode.c18) as 'Path' FROM myvideos75.episode join tvshow on tvshow.idShow = episode.idShow group by episode .idShow,episode.c12";
try
{if (File.Exists(_XMLFile))
{File.Delete(_XMLFile);}
}
catch (Exception ex)
{ MessageBox.Show(ex.Message.ToString()); }
MySqlConnection connection = new MySqlConnection(MyConString);
try
{
MySqlCommand _MySqlSelect = new MySqlCommand(SQLSelect, connection);
DataSet _DataSet1 = new DataSet("XBMC");
MySqlDataAdapter _MySqlDataAdapter1 = new MySqlDataAdapter(_MySqlSelect);
_MySqlDataAdapter1.Fill(_DataSet1,"Show");
XDocument xdoc;
XElement root;
XElement tvshow;
XElement TvShowElement;
xdoc = new XDocument(new XElement("XBMC"));
root = xdoc.XPathSelectElement("//XBMC");
// loop start fills stuff in
foreach (DataRow row in _DataSet1.Tables[0].Rows)
{
// Test if the show exists if not create it and add all the Element
var ShowIDTest = xdoc.Element("XBMC").Elements("Show").Where(x => x.Element("idShow").Value.Equals(row["idShow"].ToString())).ToList();
if (ShowIDTest.Count < 1)
{
TvShowElement = new XElement("Show",
new XElement("idShow", row["idShow"].ToString()),
new XElement("ShowName", row["ShowName"].ToString()),
new XElement("Seasons",
new XElement("Season",
new XElement("Number", row["Season"].ToString()),
new XElement("Path", row["Path"].ToString()))));
root.Add(TvShowElement);
}
// The Show Exists , go to the show
else
{
string tvshowpath = "/XBMC/Show[idShow =\"" + row["idShow"].ToString() + "\"]";
tvshow = xdoc.XPathSelectElement(tvshowpath);
// Check if the show already has any season if not create it
bool SeasonsTest = tvshow.Descendants("Seasons").Any();
if (!SeasonsTest)
{
TvShowElement = new XElement("Seasons",
new XElement("Season",
new XElement("Number", row["Season"].ToString()),
new XElement("Path", row["Path"].ToString())));
tvshow.Add(TvShowElement);
}
// the show already has any season element so append the additional seasons
else
{
string tvshowseasonspath = "/XBMC/Show[idShow =\"" + row["idShow"].ToString() + "\"]/Seasons";
tvshow = xdoc.XPathSelectElement(tvshowseasonspath);
TvShowElement = new XElement("Season",
new XElement("Number", row["Season"].ToString()),
new XElement("Path", row["Path"].ToString()));
tvshow.Add(TvShowElement);
}
}
}
// Save the XML File
xdoc.Save(_XMLFile);
MessageBox.Show("done");
}
catch (Exception ex)
{ MessageBox.Show(ex.Message.ToString()); }