Pętla w xml to linq

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

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:

 
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:

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:

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

0

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

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

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

1

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

			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");
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

1 użytkowników online, w tym zalogowanych: 0, gości: 1