2015-07-09 4 views
0

Я ищу помощь.Проблема с проектом Xml

Я создал веб-службу mp3, используя визуальную студию C# и xml для хранения данных. Я создал метод, который позволит пользователю создать новый идентификатор списка воспроизведения, который будет сохранен в документе 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"; 

Это, прежде чем любой из методов в моей программе.

Файл My songlist.xml хранится правильно и является правильным путем, чем я могу видеть.

В настоящее время я имел mp3 идентификаторы хранятся на файл songlist.xml выглядит следующим образом:

<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> 

код, который я написал, чтобы создать новый идентификатор плейлиста выглядит следующим образом:

//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; 
} 

Но когда я бегу программа, создайте новый идентификатор списка воспроизведения и вызовите команду: он отображает веб-страницу «страница не найдена».

Я не могу понять, почему метод создания рушится.

Если кто-нибудь может дать какие-либо советы, я был бы очень признателен.

+0

Вы пробовали добавлять контрольные точки, чтобы увидеть, где именно в вашем коде есть проблема? – kaonashi

ответ

1

Вы пробовали пройти через него? Вы обнаружите, что это терпит неудачу, потому что ваше выражение XPath недействительно. Ваш конкатенации создает выражение вроде этого:

/SongList/Playlist[@ID'123'] 

Где она должна быть:

/SongList/Playlist[@ID='123'] 

Я тоже не совсем уверен, что логика имеет смысл. Вы проверяете, что список воспроизведения не содержит с этим идентификатором, а затем добавляет его. Итак, как ваше выражение XPath должно возвращать элемент?

Как и в сторону, вы, вероятно, следует искать в LINQ к 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") 
     )); 
+0

Спасибо, ребята, я понял это и получил то, что искал для работы. – Peter3514608