Új hozzászólás Aktív témák

  • Keem1

    veterán

    Már megint elakadtam :F
    A téma lehet hogy ismerős lesz a korábbi posztjaimból, de azért frissítem az emlékeket.

    Nagy (több GB-os) XML-ekkel dolgozunk, amit az xmlReader.ReadToFollowing("product") segítségével olvasok végig (így piszok gyors és szinte semmi memóriafogyasztása sincs a DOM-alapú megnyitáshoz képest).

    XML struktúra:
    <product-export>
    <product>
    <product>
    <product>
    </product-export>

    Amikor egy adott product node-on vagyok, akkor azt az egyet betöltöm egy DOM alapú objektumba, és azzal az eggyel már DOM alapon dolgozom. Így valójában hiába van az XML-ben több tízezer <product> node, mindig csak egyet töltök be DOM-ba és dolgozom vele. Ez eddig beválni látszott, ám úgy tűnik, egy óriási hiba van a gépezetben. Ugyanis onnan kezdve, hogy betöltöm az egy szem node-ot, rögtön szelektálni kezd a program, és kihagy egy csomó product node-ot. Nem jöttem rá, miért, és mi alapján. Van egy kicsi teszt fájlom, 35 node-dal, ebből 17-et lát ezzel a módszerrel. A DOM-részt kihagyva végigszalad mind a 35-ön.

    Mutatom:
    while (xmlReader.ReadToFollowing("product"))
    {
    if (xmlReader.Name.Equals("product") && (xmlReader.NodeType == XmlNodeType.Element))
    {

    // Számláló továbbléptetése
    counter++;
    Console.WriteLine(counter.ToString() + ". " + xmlReader.Name.ToString());



    XmlDocument xmldoc = new XmlDocument();
    XmlElement root = xmldoc.CreateElement("product-export");
    xmldoc.AppendChild(root);
    XmlNode node = xmldoc.ReadNode(xmlReader);

    A legutolsó kódsornál jelentkezik az anomália (XmlNode node = xmldoc.ReadNode(xmlReader);). Ha kikommentezem, ugyan üres lesz a DOM-om, de végigmegy az összes producton. Ezt a számláló utáni kiíratás mutatja.

    Kimenet, ha kikommentezem az említett részt:
    0. product
    1. product
    2. product
    3. product
    4. product
    5. product
    6. product
    7. product
    8. product
    9. product
    10. product
    11. product
    12. product
    13. product
    14. product
    15. product
    16. product
    17. product
    18. product
    19. product
    20. product
    21. product
    22. product
    23. product
    24. product
    25. product
    26. product
    27. product
    28. product
    29. product
    30. product
    31. product
    32. product
    33. product
    34. product
    35. product

    És ha benne hagyom:
    0. product
    1. product
    2. product
    3. product
    4. product
    5. product
    6. product
    7. product
    8. product
    9. product
    10. product
    11. product
    12. product
    13. product
    14. product
    15. product
    16. product
    17. product

    Mit rontok el? :R

Új hozzászólás Aktív témák

Hirdetés