Xml项目问题

时间:2015-07-09 09:32:51

标签: c# xml web-services

我正在寻求帮助。

我使用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;网页。

我无法弄清楚创建方法崩溃的原因。

如果有人可以提出任何建议,我会非常感激。

1 个答案:

答案 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")
        ));