我想为我的教堂创建一个程序,该教堂从保存文件中获取歌曲。 但是我不知道如何将这些数据放入多维数组。 以下是我想放入数组的内容。那可能吗? (我是C#的新手)
<items>
<CMediaBase xsi:type="CSong">
<DisplayTitle>Eigen bundel 10 - In Jesus name</DisplayTitle>
<IsDirty>false</IsDirty>
<SwapLanguages>false</SwapLanguages>
<SongLanguage>Both</SongLanguage>
<MediaType>Song</MediaType>
<Number>10</Number>
<SelectedVersion>MyVersion</SelectedVersion>
<SongBookName>Eigen bundel</SongBookName>
<ThemeName>OPS</ThemeName>
<Title>In Jesus name</Title>
</CMediaBase>
</items>
答案 0 :(得分:3)
我认为您没有使用适当的数据结构来解决问题。
二维数组无法解决这里的问题,归结为解析歌曲XML文件并将该数据表示形式转换为可在C#中使用的内容。
我建议用C#类来代表您的歌曲,如下所示:
[XmlRoot("SongList")]
public class SongList
{
[XmlElement("Song")]
public List<Song> Songs { get; set; }
}
public class Song
{
[XmlElement("DisplayTitle")]
public string DisplayTitle { get; set; }
[XmlElement("IsDirty")]
public bool IsDirty { get; set; }
[XmlElement("SwapLanguage")]
public bool SwapLanguage { get; set; }
[XmlElement("SongLanguage")]
public string SongLanguage { get; set; }
[XmlElement("MediaType")]
public string MediaType { get; set; }
[XmlElement("Number")]
public int Number { get; set; }
[XmlElement("SongBookName")]
public string SongBookName { get; set; }
[XmlElement("ThemeName")]
public string ThemeName { get; set; }
[XmlElement("Title")]
public string Title { get; set; }
}
请注意使用 [XmlElement] 和 [XmlRoot] 属性,这些属性使我们可以向XML序列化程序指定如何将XML表示形式解析为C# XML的表示形式。
现在使用如下所示的XML字符串:
string xml = @"<SongList>
<Song>
<DisplayTitle> Eigen bundel 10 - In Jesus name</DisplayTitle>
<IsDirty > false </IsDirty>
<SwapLanguages >false </SwapLanguages>
<SongLanguage > Both </SongLanguage >
<MediaType >Song</MediaType >
<Number>10</Number >
<SelectedVersion >MyVersion</SelectedVersion >
<SongBookName > Eigen bundel</SongBookName >
<ThemeName >OPS</ThemeName >
<Title >In Jesus name</Title>
</Song>
<Song>
<DisplayTitle > Song 2</DisplayTitle >
<IsDirty > true </IsDirty >
<SwapLanguages > false </SwapLanguages >
<SongLanguage > Both </SongLanguage >
<MediaType > Song </MediaType >
<Number > 10 </Number >
<SelectedVersion > MyVersion </SelectedVersion >
<SongBookName > Eigen bundel </SongBookName >
<ThemeName > OPS </ThemeName >
<Title > In Jesus name</Title >
</Song>
</SongList>";
然后,您可以使用C#序列化程序将此XML表示反序列化为对象表示,如下所示:
var serializer = new XmlSerializer(typeof(SongList));
using (var reader = new StringReader(xml))
{
var albums = serializer.Deserialize(reader) as SongList;
}
如果要读取文本文件,则应将文件加载到FileStream中,并按如下所示反序列化:
using (var fs= new FileStream("<YOUR XML FILE PATH>", FileMode.Open))
{
var songList = serializer.Deserialize(fs) as SongList;
}
请注意,您应该导入以下名称空间,以便能够使用XML序列化程序和FileStream类:
using System.IO;
using System.Xml;
using System.Xml.Serialization;