Pętla w xml to linq

Pętla w xml to linq
P1
  • Rejestracja:około 12 lat
  • Ostatnio:prawie 12 lat
  • Postów:2
0

Jak zrobić taki zapis:

<test> <test2> <test3>liczba1</test3> <test3>liczba2</test3> <test3>...</test3> <test3>liczba99</test3> <test3>liczba100</test3> </test2> </test>

jak zrobic taki zapis zeby bylo 100 liczb pokolei? nie wiem jak tam wlozyc petle do xml

edytowany 1x, ostatnio: programator123
osamex
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
  • Postów:76
1

Napisz sobie klasę którą będziesz serializował do XML a w niej XML element (np inny obiekt) w jakiejś pętli, może być (na szybko, bardzo szybko) TAK:

Klasa do serializacji:

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

namespace Odczyt_multidata
{
    [Serializable]
    public class testXML
    {
        public testXML()
        {
            tablica = null;
        }

        public testXML(int iloscElementow)
        {
            tablica = GenerujElementy(iloscElementow);
        }

        string rootName = "Test1";

        [XmlElement("Test2")]
        public string[] tablica;

        private string[] GenerujElementy(int iteracja)
        {
            string[] tabLokalna = new string[iteracja];
            for (int i = 0; i < iteracja; i++)
            {
                tabLokalna[i] = "Liczba" + i.ToString();
            }

            return tabLokalna;
        }

        public void SerializujDoPliku(string FilePath)
        {
            StreamWriter sw = new StreamWriter(FilePath);
            XmlRootAttribute rootAttribute = new XmlRootAttribute();
            rootAttribute.IsNullable = false;
            rootAttribute.ElementName = rootName;
            XmlSerializer serialize = new XmlSerializer(typeof(testXML), rootAttribute);
            serialize.Serialize(sw, this);
            sw.Close();
        }
    }
}

I sposób użycia:

Kopiuj
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using OSAMEX.DLL.EncryptDataSerializeCfg;

namespace Odczyt_multidata
{
    class Program
    {
        static void Main(string[] args)
        {
            testXML mojXML = new testXML(100);
            mojXML.SerializujDoPliku("test.xml");
        }
    }
}

A oto efekt:

Kopiuj
<?xml version="1.0" encoding="utf-8"?>
<Test1 xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Test2>Liczba0</Test2>
  <Test2>Liczba1</Test2>
  <Test2>Liczba2</Test2>
  <Test2>Liczba3</Test2>
  <Test2>Liczba4</Test2>
  <Test2>Liczba5</Test2>
  <Test2>Liczba6</Test2>
  <Test2>Liczba7</Test2>
  <Test2>Liczba8</Test2>
  <Test2>Liczba9</Test2>
  <Test2>Liczba10</Test2>
  <Test2>Liczba11</Test2>
  <Test2>Liczba12</Test2>
  <Test2>Liczba13</Test2>
  <Test2>Liczba14</Test2>
  <Test2>Liczba15</Test2>
  <Test2>Liczba16</Test2>
  <Test2>Liczba17</Test2>
  <Test2>Liczba18</Test2>
  <Test2>Liczba19</Test2>
  <Test2>Liczba20</Test2>
  <Test2>Liczba21</Test2>
  <Test2>Liczba22</Test2>
  <Test2>Liczba23</Test2>
  <Test2>Liczba24</Test2>
  <Test2>Liczba25</Test2>
  <Test2>Liczba26</Test2>
  <Test2>Liczba27</Test2>
  <Test2>Liczba28</Test2>
  <Test2>Liczba29</Test2>
  <Test2>Liczba30</Test2>
  <Test2>Liczba31</Test2>
  <Test2>Liczba32</Test2>
  <Test2>Liczba33</Test2>
  <Test2>Liczba34</Test2>
  <Test2>Liczba35</Test2>
  <Test2>Liczba36</Test2>
  <Test2>Liczba37</Test2>
  <Test2>Liczba38</Test2>
  <Test2>Liczba39</Test2>
  <Test2>Liczba40</Test2>
  <Test2>Liczba41</Test2>
  <Test2>Liczba42</Test2>
  <Test2>Liczba43</Test2>
  <Test2>Liczba44</Test2>
  <Test2>Liczba45</Test2>
  <Test2>Liczba46</Test2>
  <Test2>Liczba47</Test2>
  <Test2>Liczba48</Test2>
  <Test2>Liczba49</Test2>
  <Test2>Liczba50</Test2>
  <Test2>Liczba51</Test2>
  <Test2>Liczba52</Test2>
  <Test2>Liczba53</Test2>
  <Test2>Liczba54</Test2>
  <Test2>Liczba55</Test2>
  <Test2>Liczba56</Test2>
  <Test2>Liczba57</Test2>
  <Test2>Liczba58</Test2>
  <Test2>Liczba59</Test2>
  <Test2>Liczba60</Test2>
  <Test2>Liczba61</Test2>
  <Test2>Liczba62</Test2>
  <Test2>Liczba63</Test2>
  <Test2>Liczba64</Test2>
  <Test2>Liczba65</Test2>
  <Test2>Liczba66</Test2>
  <Test2>Liczba67</Test2>
  <Test2>Liczba68</Test2>
  <Test2>Liczba69</Test2>
  <Test2>Liczba70</Test2>
  <Test2>Liczba71</Test2>
  <Test2>Liczba72</Test2>
  <Test2>Liczba73</Test2>
  <Test2>Liczba74</Test2>
  <Test2>Liczba75</Test2>
  <Test2>Liczba76</Test2>
  <Test2>Liczba77</Test2>
  <Test2>Liczba78</Test2>
  <Test2>Liczba79</Test2>
  <Test2>Liczba80</Test2>
  <Test2>Liczba81</Test2>
  <Test2>Liczba82</Test2>
  <Test2>Liczba83</Test2>
  <Test2>Liczba84</Test2>
  <Test2>Liczba85</Test2>
  <Test2>Liczba86</Test2>
  <Test2>Liczba87</Test2>
  <Test2>Liczba88</Test2>
  <Test2>Liczba89</Test2>
  <Test2>Liczba90</Test2>
  <Test2>Liczba91</Test2>
  <Test2>Liczba92</Test2>
  <Test2>Liczba93</Test2>
  <Test2>Liczba94</Test2>
  <Test2>Liczba95</Test2>
  <Test2>Liczba96</Test2>
  <Test2>Liczba97</Test2>
  <Test2>Liczba98</Test2>
  <Test2>Liczba99</Test2>
</Test1>

Oczywiście jest to tylko bardzo szybki przykład i dla twojego efektu musisz troche pokombinować, polecam artykuły o serializacji do XML, tylko przestrzegam że serializować możemy tylko publiczne atrybuty (obiekty itp.) dla serializacji do xml prywatnych elementów trzeba sie troszkę napociś (np poprzez DataContract). Pozdrawiam

osamex
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
  • Postów:76
0

Nie no spoko, nie ma za co ....

P1
  • Rejestracja:około 12 lat
  • Ostatnio:prawie 12 lat
  • Postów:2
0

nie odpisalem jeszcze nic bo na razie jeszcze nie miałem czasu tego wszystkiego przeanalizować, ale dosc skomplikowane
myslalem ze nie bedzie z tym az tak duzo roboty
tak czy inaczej dzieki

XS
  • Rejestracja:około 12 lat
  • Ostatnio:około 7 lat
  • Postów:8
0

@osamex, Prawdziwi bohaterowie nie szukają chwały :)

A tak na serio, uroki forum, nie zawsze podziękują, czasami zapomną, że temat założyli.

Tak, żeby nie było, że spam :). Nie lepiej użyć wbudowanej funkcji do serializacji (po co wymyślać koło)?

przepraszam, ślepnę, wydawało mi się, że pisałeś klasę do serializacji :/, nie wiem skąd mi się to wzięło :/

edytowany 1x, ostatnio: xxSlayeRxx
ŁF
Moderator
  • Rejestracja:ponad 22 lata
  • Ostatnio:4 dni
1

@osamex - a to żeś pojechał do ostatniej stacji... (-:

Kopiuj
			var xml = XElement.Parse("<test><test2/></test>");
			var container = xml.Element("test2");
			for (int i = 1; i <= 100; i++)
				container.Add(new XElement("test3", "liczba"+i));
			xml.Save("someFile.xml");

osamex
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
  • Postów:76
0

Siemka, no zażartować nie można od razu kwasy :P ja też czasami zapomnę, a co do mojego kodu to był pisany naprawdę bardzo szybko i to tuż przed snem. Do każdego celu jest zawsze kilka dróg, "przynajmniej" w naszej pasji (hobby czy też zawodzie) tyle dróg ilu programistów. "ŁF" - każdy ma prawo do samodzielnego myślenia, nie napisałem kodu do zerżnięcia na żywca ale naprowadziłem na pewien tor, co dalej zrobi zainteresowany (możliwe że zgłębi XmlSerializable, poczyta na msdn itp..) to pozostaje w jego interesie. Z Twojego kodu natomiast dowie się tyle że trzeba zjechać od góry do dołu i "coś" wyskoczy jak już mamy tak na siebie wrzucać, co nie znaczy że jest zły, wręcz przeciwnie Twój kod jest "profesjonalniejszy" :D od mojego i z pewnością z zachowniem dobrych praktyk programistycznych ( nie wymyślanie koła na nowo ^^). Jak się ze mną nie zgadasz to cóż. Pozdrawiam

edytowany 1x, ostatnio: osamex
somekind
Bynajmniej to nie przynajmniej.
osamex
Poprawione :)
ŁF
zjechałem od góry do dołu? chyba od dołu do góry, w tej pętli for.
osamex
Dziwny jesteś, kto napisał że Ty coś zjechałeś? Zresztą wyraźnie zaznaczyłem że Twój kod jest ok.
ŁF
nikt inny nie krytykował

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.