C# XML element beszúrás

C# XML element beszúrás
2012-09-26T23:59:55+02:00
2012-09-27T13:13:35+02:00
2022-11-26T23:45:40+01:00
csabi20
Szevasztok!

Segítséget szeretnék kérni a következő problémába!

Van egy xml fájlom, a struktúra a következő:

<jatszmak> <jatszma id="1"> <jatekos név="dori"> <j301> <koreredmenyek id="1"> <pontszam>30</pontszam> </koreredmenyek> </j301> <helyezés>2.</helyezés> <pontszam>13</pontszam> </játekos> </jatszma> <jatszma id=2> </jatszma> </jatszmak>

Egy beszúrást szeretnék elvégezni még pedig a következő módon.
ezt szeretném beszúrni:

<koreredmenyek id="2"> <pontszma>20</pontszam> </koreredmenyek>

még pedig a <jatszma id=1> a <jatekos id="dori"> -hoz a <301>
</301> közé a koreredmenyek id=1 után.

Én ezzel a szintaktikával próbálkoztam de nem tudok rájönni mi nem jó!

doc.Elements("jatszmak").Elements("jatszma").Where(x => (int)x.Attribute("id") == 1).FirstOrDefault().Elements("jatekos").Where(y=>y.Attribute("id").ToString()=="dori").Elements("j301").FirstOrDefault().Add(tipus);

ez a fordító üzenete:
"Object reference not set to an instance of an object."

Előre is köszönöm a segítséget!
Mutasd a teljes hozzászólást!
első ránézésre is

1.
(int)x.Attribute("id") == 1
ez mi?
Az attribute-nak a Value értékét nézzük.
Elég csúnya castolás
sima nullreference exception lehetőség

2.
Where(x => (int)x.Attribute("id") == 1).FirstOrDefault()
pontosan egyenlő ezzel: FirstOrDefault(x => (int)x.Attribute("id") == 1)
tekintve,hogy ez null értékkel is visszatérhet..... :( :(

3.
Where(y=>y.Attribute("id").ToString()=="dori")
a játékosnak nem "id" hanem "nev" attributuma van és szintén a Value értéket kell nézni
Where(y => y.Attribute("nev").Value == "dori")

ebből lesz egy ekkora gány végül:
doc.Elements("jatszmak").Elements("jatszma").FirstOrDefault(x => x.Attribute("id").Value == "1").Elements("jatekos").Where(y => y.Attribute("nev").Value == "dori").Elements("j301").FirstOrDefault().Add(tipus);

remélem suliba kell, mert csak egy tanár lehet akkora dilettáns,aki ezt a kódot elfogadja
Mutasd a teljes hozzászólást!

  • XML-edben a <jatekos> </játekos>-sal van bezárva. (ékezet)

    Illetve Elements("jatekos").Where(y=>y.Attribute("név").ToString()=="dori") nem "név" kéne "id" helyett?
    Mutasd a teljes hozzászólást!
  • Köszönöm a válaszod de azt elírtam. A játékosnak az atributuma is id tehát
    <jatekos id="dori">!
    Elnézést az elírásért!
    Mutasd a teljes hozzászólást!
  • ...és a <301> is <j301> figyelmetlen voltam ezzel de nem ez miatt nem működik a nevek rendben vannak.
    Mutasd a teljes hozzászólást!
  • első ránézésre is

    1.
    (int)x.Attribute("id") == 1
    ez mi?
    Az attribute-nak a Value értékét nézzük.
    Elég csúnya castolás
    sima nullreference exception lehetőség

    2.
    Where(x => (int)x.Attribute("id") == 1).FirstOrDefault()
    pontosan egyenlő ezzel: FirstOrDefault(x => (int)x.Attribute("id") == 1)
    tekintve,hogy ez null értékkel is visszatérhet..... :( :(

    3.
    Where(y=>y.Attribute("id").ToString()=="dori")
    a játékosnak nem "id" hanem "nev" attributuma van és szintén a Value értéket kell nézni
    Where(y => y.Attribute("nev").Value == "dori")

    ebből lesz egy ekkora gány végül:
    doc.Elements("jatszmak").Elements("jatszma").FirstOrDefault(x => x.Attribute("id").Value == "1").Elements("jatekos").Where(y => y.Attribute("nev").Value == "dori").Elements("j301").FirstOrDefault().Add(tipus);

    remélem suliba kell, mert csak egy tanár lehet akkora dilettáns,aki ezt a kódot elfogadja
    Mutasd a teljes hozzászólást!
  • Köszönöm szépen sokat segítettél!Tökéletes!
    Egyébként tényleg suliba kell de talán van erre egyszerűbb megoldás is?
    Mutasd a teljes hozzászólást!
  • ebbe jobban bele kell mélyedni, mit fog a program PONTOSAN csinálni.

    Ami nagyon nagy gond, hogy rengeteg helyen lehet nullreferenceException.

    ajánlom a resharper használatát
    töltsd le, ingyenes próbeverziója van.
    2 nap múlva már nem tudsz nélküle létezni, és piszkosul segíteni fog a tanulásban.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd