problem med at få xmlDoc.ImportNode til at importere node
Det er som om at følgende kode bare ikke gør noget. Når jeg får min xpathnodeiterator tilbage er der ingen noder, så jeg tror ikke de bliver importeret rigtigt (jeg har fjernet noget af koden, fordi den ikke er relevant. Hele koden er nederst)public static XPathNodeIterator GeneratePlaylist(XPathNodeIterator PlaylistNodes, string StartDatestring, string EndDatestring)
{
XmlDocument xmlDoc = new XmlDocument();
while (PlaylistNodes.MoveNext())
{
XPathNavigator node = PlaylistNodes.Current.CreateNavigator(); xmlDoc.ImportNode(((IHasXmlNode)node).GetNode(), true);
}
return xmlDoc.CreateNavigator().Select(".");
}
Det skøre er ydermere at jeg sagtens kan få outputtet outerxml'en for de noder jeg gerne ville have importeret med følgende hjælpemetode jeg har lavet for at teste om jeg er debil (igen kan hele koden ses nederst):
public static string GetPlaylistXmlAsString(XPathNodeIterator Nodes, string StartDatestring, string EndDatestring)
{
while(Nodes.MoveNext())
{
XPathNavigator node = Nodes.Current.CreateNavigator();
str += node.GetAttribute("id", "");
str += ((IHasXmlNode)node).GetNode().OuterXml;
}
return str;
}
------------------------------
Hele koden
------------------------------
public static XPathNodeIterator GeneratePlaylist(XPathNodeIterator PlaylistNodes, string StartDatestring, string EndDatestring)
{
XmlDocument xmlDoc = new XmlDocument();
DateTime StartDate = DateTime.Parse(StartDatestring);
DateTime EndDate = DateTime.Parse(EndDatestring);
DateTime playlistDate = StartDate;
while (PlaylistNodes.MoveNext())
{
XPathNavigator node = PlaylistNodes.Current.CreateNavigator();
DateTime startdate = DateTime.Parse(node.SelectSingleNode("data[@alias='StartDate']").Value);
DateTime enddate = DateTime.Parse(node.SelectSingleNode("data[@alias='EndDate']").Value);
//check startdate is before playlistdate, enddate is after playlistdate playlistdate is before playlistend, StartTime is before playlistDate time, EndTime is after playlistDate time
if (startdate <= playlistDate && enddate > playlistDate && playlistDate < EndDate && Convert.ToDateTime(node.SelectSingleNode("data[@alias='StartTime']").Value) < Convert.ToDateTime(playlistDate.ToShortTimeString()) && Convert.ToDateTime(node.SelectSingleNode("data[@alias='EndTime']").Value) > Convert.ToDateTime(playlistDate.ToShortTimeString()))
{
xmlDoc.ImportNode(((IHasXmlNode)node).GetNode(), true);
playlistDate.AddMilliseconds(int.Parse(node.SelectSingleNode("data[@alias='Duration']").Value));
}
}
return xmlDoc.CreateNavigator().Select(".");
}
-------------
part 2
public static string GetPlaylistXmlAsString(XPathNodeIterator Nodes, string StartDatestring, string EndDatestring)
{
DateTime StartDate = DateTime.Parse(StartDatestring);
DateTime EndDate = DateTime.Parse(EndDatestring);
DateTime playlistDate = StartDate;
string str = "Startdate = " + StartDate.ToLongTimeString() + " And Enddate = " + EndDate.ToLongTimeString();
while(Nodes.MoveNext())
{
XPathNavigator node = Nodes.Current.CreateNavigator();
DateTime startdate = DateTime.Parse(node.SelectSingleNode("data[@alias='StartDate']").Value);
DateTime enddate = DateTime.Parse(node.SelectSingleNode("data[@alias='EndDate']").Value);
str += "( " + Convert.ToDateTime(node.SelectSingleNode("data[@alias='StartTime']").Value).ToShortTimeString() + " - " + Convert.ToDateTime(node.SelectSingleNode("data[@alias='EndTime']").Value).ToShortTimeString() + " )";
//check startdate is before playlistdate, enddate is after playlistdate playlistdate is before playlistend, StartTime is before playlistDate time, EndTime is after playlistDate time
if(startdate <= playlistDate && enddate > playlistDate && playlistDate < EndDate && Convert.ToDateTime(node.SelectSingleNode("data[@alias='StartTime']").Value) < Convert.ToDateTime(playlistDate.ToShortTimeString()) && Convert.ToDateTime(node.SelectSingleNode("data[@alias='EndTime']").Value) > Convert.ToDateTime(playlistDate.ToShortTimeString()))
{
str += node.GetAttribute("id", "");
str += ((IHasXmlNode)node).GetNode().OuterXml;
playlistDate.AddMilliseconds(int.Parse(node.SelectSingleNode("data[@alias='Duration']").Value));
}
}
return str;
}