我正在寻求帮助。
我使用visual studio c#和mp3
创建了一个xml
网络服务来存储数据。我创建了一个方法,允许用户创建一个新的播放列表ID,以存储到xml
文档中。我将xml
文件设置如下:
public class Service : System.Web.Services.WebService
{
//used as an access path to the xml file
string xmlFileName = "F:\\WebServices\\Mp3Server\\SongList.xml";
这是在我的程序中的任何方法之前。
我的songlist.xml
文件存储正确,是我能看到的正确路径。
我目前在mp3
文件中存储了songlist.xml
个ID如下:
<Playlist ID="123">
<Song Title="Bump">
<Artist>Ed Sheeran</Artist>
<Album>Asylum</Album>
<Year>2011</Year>
<Genre>Folk</Genre>
</Song>
<Song Title="3 AM">
<Artist>Matchbox Twenty</Artist>
<Album>Exile On Mainstream</Album>
<Year>2007</Year>
<Genre>Rock</Genre>
</Song>
</Playlist>
我写的用于创建新播放列表ID的代码如下:
//creates a new playlist
[WebMethod]
public string createPlaylistName(string playlistID)
{
string errorMessage = "";
List<string> playlistNames = createPlaylist("/SongList//Playlist/ID");
if (playlistNames.Contains(playlistID))
{
errorMessage = "error! Id already exists";
}
else
{
string xpath = "/SongList/Playlist[@ID'" + playlistID + "']";
XmlDocument doc = new XmlDocument();
doc.Load(xmlFileName);
XmlElement root = doc.DocumentElement;
XmlNode playistNode = root.SelectSingleNode(xpath);
XmlElement playList = doc.CreateElement("Playlist");
XmlAttribute ID = doc.CreateAttribute("ID");
ID.Value = playlistID;
playList.Attributes.Append(ID);
playistNode.InsertAfter(playList, playistNode.LastChild);
doc.Save(xmlFileName);
errorMessage = "success";
}
return errorMessage;
}
但是当我运行该程序时,创建一个新的播放列表ID并调用该命令:它显示&#34;页面未找到&#34;网页。
我无法弄清楚创建方法崩溃的原因。
如果有人可以提出任何建议,我会非常感激。
答案 0 :(得分:1)
你试过踩过它吗?您会发现它失败,因为您的XPath表达式无效。你的连接创建了这样一个表达式:
/SongList/Playlist[@ID'123']
它应该在哪里:
/SongList/Playlist[@ID='123']
我也不完全确定逻辑是否合理。您正在检查播放列表是否与该ID一起存在,然后添加一个。那么你的XPath表达式应该如何返回一个元素?
顺便说一句,你应该看看LINQ to XML - 它是一个更好的API,例如:
var doc = XDocument.Load(xmlFileName);
var playlist = doc.Descendants("Playlist")
.Single(e => (string)e.Attribute("ID") == "123");
playlist.AddAfterSelf(
new XElement("Playlist",
new XAttribute("ID", "456")
));