Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  C#'i & XML'i elementide up&down märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale.  :: Teata moderaatorile teata moderaatorile
otsing:  
Absona
Lõuapoolik
Lõuapoolik

liitunud: 17.09.2008




sõnum 21.12.2008 19:36:37 C#'i & XML'i elementide up&down vasta tsitaadiga

Probleem selles, et tahaks elemente (node'deks nimetatakse tegelikult neid vist) ülesse ja alla liigutada XML'i failis. Keeleks kasutan C#.
xml:
  1.  
  2. <Maa>
  3.   <Euroopa>
  4.     <id>1</id>
  5.     <Riik>Eesti</Riik>
  6.     <Pealinn>Tallinn</Pealinn>
  7.   </Euroopa>
  8.   <Euroopa>
  9.     <id>2</id>
  10.     <Riik>Läti</Riik>
  11.     <Pealinn>Riia</Pealinn>
  12.   </Euroopa>
  13.   <Euroopa>
  14.     <id>3</id>
  15.     <Riik>Prantsusmaa</Riik>
  16.     <Pealinn>Pariis</Pealinn>
  17.   </Euroopa>
  18. </Maa>
  19.  


Kuidas ma saaksin näiteks <Euroopa> koos sisuga üles-alla liigutada C# keele abil. Näiteks niimoodi:

xml:
  1.  
  2. <Maa>
  3.   <Euroopa>
  4.     <id>1</id>
  5.     <Riik>Eesti</Riik>
  6.     <Pealinn>Tallinn</Pealinn>
  7.   </Euroopa>
  8.   <Euroopa>
  9.     <id>2</id>
  10.     <Riik>Prantsusmaa</Riik>
  11.     <Pealinn>Pariis</Pealinn>
  12.   </Euroopa>
  13.   <Euroopa>
  14.     <id>3</id>
  15.     <Riik>Läti</Riik>
  16.     <Pealinn>Riia</Pealinn>
  17.   </Euroopa>
  18. </Maa>
  19.  


Täpsemini seletatud iga nupu click tõstab/langetab ühte elementi ühe võrra mis on näiteks kusagil listbox'ist valitud. Listbox'i laetakse andmeid XML'ist.
Proovisin kasutada XmlDocument() ja näiteks PreviousSibling aga midagi ei tule välja. Olen netist otsinud aga ei leia korralike näiteid ja pole varem nende elementide tõstmise/langetamistega kokku puutunud. Oskab keegi ehk aidata.

_________________
Veebilehed, veebiprogrammeerimine, veebilahendused
Erinevad rakendused ja skriptid.
Kommentaarid: 11 loe/lisa Kasutajad arvavad:  :: 2 :: 0 :: 8
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
andresv
HV kasutaja

liitunud: 06.12.2004



Autoriseeritud ID-kaardiga

sõnum 22.12.2008 11:49:16 vasta tsitaadiga

insertBefore, insertAfter ja removeChild meetoditega peaks saama selle tehtud.
Kommentaarid: 5 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 5
tagasi üles
vaata kasutaja infot saada privaatsõnum
reneSharp
HV kasutaja
reneSharp

liitunud: 13.11.2005




sõnum 23.12.2008 16:04:42 vasta tsitaadiga

Eelistaksin ise otse xmliga mitte mässata.
Pigem muundada xml klassistruktuuri ,kus on elemente palju lihtsam liigutada nii nagu vaja.

näiteks umbes nii:

using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Xml.Serialization;

namespace ConsoleApplication4
{
    class Program
    {
        private static string xml =
  @"<Maa>
  <Euroopa>
    <id>1</id>
    <Riik>Eesti</Riik>
    <Pealinn>Tallinn</Pealinn>
  </Euroopa>
  <Euroopa>
    <id>2</id>
    <Riik>Läti</Riik>
    <Pealinn>Riia</Pealinn>
  </Euroopa>
  <Euroopa>
    <id>3</id>
    <Riik>Prantsusmaa</Riik>
    <Pealinn>Pariis</Pealinn>
  </Euroopa>
</Maa>";
        static void Main(string[] args)
        {
            var maaserializer = new XmlSerializer(typeof (Maa));
            var maa = (Maa)maaserializer.Deserialize(new MemoryStream(Encoding.UTF8.GetBytes(xml)));
            Console.WriteLine("Algne");
            maa.ForEach(item => Console.WriteLine(item.id+" "+item.Riik));
            maa  =MoveFirstToLast(maa);
            Console.WriteLine("Peale liigutamist");
            maa.ForEach(item => Console.WriteLine(item.id + " " + item.Riik));
           
            //tagasi xmli
            var outStream = new MemoryStream();
            maaserializer.Serialize(outStream,maa);
            outStream.Position = 0;
            Console.WriteLine(new StreamReader(outStream).ReadToEnd());

            //output peaks olema selline
            /*
             Algne
1 Eesti
2 Läti
3 Prantsusmaa
Peale liigutamist
1 Läti
2 Prantsusmaa
3 Eesti
<?xml version="1.0"?>
<Maa xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www
.w3.org/2001/XMLSchema">
  <Euroopa>
    <id>1</id>
    <Riik>Läti</Riik>
    <Pealinn>Riia</Pealinn>
  </Euroopa>
  <Euroopa>
    <id>2</id>
    <Riik>Prantsusmaa</Riik>
    <Pealinn>Pariis</Pealinn>
  </Euroopa>
  <Euroopa>
    <id>3</id>
    <Riik>Eesti</Riik>
    <Pealinn>Tallinn</Pealinn>
  </Euroopa>
</Maa>
             */


        }

        private static Maa MoveFirstToLast(Maa inCollection)
        {
            var riigid = new LinkedList<EuroopaRiik>(inCollection); 
            riigid.AddLast(riigid.First.Value);
            riigid.RemoveFirst();
            return  ReassignIdentities(new Maa(riigid.ToArray()));
        }

        private static Maa ReassignIdentities(Maa maa)
        {
            for (int i = 0; i < maa.Count; i++)
             maa[i].id = i+1;
            return maa;
        }
       
    }
    [XmlType(TypeName = "Maa")]
    public class Maa : List<EuroopaRiik>
    { 
        public Maa(){}
        public Maa(IEnumerable<EuroopaRiik> collection):base(collection){}
    }
    [XmlType(TypeName = "Euroopa")]
    public class EuroopaRiik
    {
        public int id { get; set; }
        public string Riik { get; set; }
        public string Pealinn { get; set; }
    }
   
}

Kommentaarid: 25 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 25
tagasi üles
vaata kasutaja infot saada privaatsõnum
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  C#'i & XML'i elementide up&down
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.