webForumDet fria alternativet

Spara datat högst upp i xml-filen?

.NET

2 svar · 409 visningar · startad av Metatron

Medlem sedan dec. 200697 inlägg
Frågan#1

Vill att när jag lägger till nya filer att datat sparas högst upp i xml-filen och inte lägst ner.

Alltså en ny fil ska hamna ovanför denna, inte under.

<images>
  <pic>
    <image>mama.jpg</image>
    <caption>asd</caption>
    <thumbnail>t_mama.jpg</thumbnail>
</pic>
</images>

Resultat:

<images>
  <pic>
    <image>papa.jpg</image>
    <caption>asd</caption>
    <thumbnail>t_papa.jpg</thumbnail>
 </pic>
  <pic>
    <image>mama.jpg</image>
    <caption>asd</caption>
    <thumbnail>t_mama.jpg</thumbnail>
</pic>
</images>

Vad kan jag använda mig av?

Nedan finner ni koden för uppladdning av bilder.

protected void UploadImage(HttpPostedFile file)
{
   string fileName = file.FileName.Substring(file.FileName.LastIndexOf('\\') + 1);
   string filePath = MapPath("../Admin/XML//" + fileName);

        using (System.Drawing.Image image =  System.Drawing.Image.FromStream(file.InputStream))
        
        using (Bitmap bitmap = new Bitmap(image, 480, 360))
        {
            bitmap.Save(MapPath("../Admin/XML/l_" + fileName), System.Drawing.Imaging.ImageFormat.Jpeg);
            bitmap.Dispose();
        }

        using (System.Drawing.Image image = System.Drawing.Image.FromStream(file.InputStream))
        
        using (Bitmap bitmap = new Bitmap(image, 60, 45))
        {
            bitmap.Save(MapPath("../Admin/XML/thumbs/t_" + fileName), 
            image.RawFormat);
            bitmap.Dispose();
        }

        try
        {
            XmlDocument xDoc = new XmlDocument();
            xDoc.Load(Server.MapPath("../Admin/XML/mama.xml"));
            XmlElement newElem = xDoc.CreateElement("pic");

            if (TextBox1.Text == "")
            {
                TextBox1.Text = "Mama";
            }

            newElem.InnerXml = "<image></image><caption></caption><thumbnail></thumbnail>";
            newElem.AppendChild(xDoc.CreateWhitespace("\r\n")); // Linefeed
            newElem["image"].InnerText = "admin/XML/l_" + fileName;
            newElem["caption"].InnerText = TextBox1.Text;
            newElem["thumbnail"].InnerText = "admin/XML/thumbs/t_" + fileName;

            xDoc.DocumentElement.AppendChild(newElem);

            XmlTextWriter writer = new XmlTextWriter(Server.MapPath("../Admin/XML/mama.xml"), null);

            writer.Formatting = Formatting.Indented;
            xDoc.PreserveWhitespace = true;
            xDoc.WriteTo(writer);
            writer.Close();
Medlem sedan dec. 19996 721 inlägg
#2

Du får använda InsertBefore(newElem,xDoc.DocumentElement.FirstChild) i stället för AppendChild.

Medlem sedan dec. 200697 inlägg
#3

Tack det fungerade!

xDoc.DocumentElement.InsertBefore(newElem, xDoc.DocumentElement.FirstChild);

256 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)