Probleme met XML / DOM boom herskryf met behulp van Jdom (ConcurrentModificationException)

StackOverflow https://stackoverflow.com/questions/588883

  •  09-09-2019
  •  | 
  •  

Vra

Ek moet 'n Jdom boom loop en veranderinge aan te bring as ek gaan saam; Op hierdie punt, is veranderinge meestal die toevoeging van nuwe elemente op die oomblik, maar kon ook herordening elemente of verwydering van elemente. Alle werk wat gedoen is op dieselfde draad so daar is geen samelopendheid kwessies.

Dit blyk moeilik te wees nie, want Jdom iterators n ConcurrentModificationException kan gooi as jy probeer om 'n knoop in traversal voeg. Van wat ek kan sien, Jdom gebruik lyste in plaas van direk te koppel DOM knope en dit maak dit moeilik om veranderinge te doen op die vlieg.

Ek het 'n paar aanbevelings oor hoe om te gaan met hierdie gesien, soos uitstel van die voeg tot ná die traversal gedoen word, of die bou van 'n nuwe boom op die vlieg sodat die gekruis boom onveranderd bly. Dit sal nie werk vir my, want ek het 'n stem ooreen siening van die boom nodig as ek verander dit.

Ek is besig om te vermoed dat Jdom sal net nie hier werk nie. Het enige van die ander Java DOM modelle hierdie makliker? Of is daar 'n manier om dit te doen in Jdom?

Was dit nuttig?

Oplossing

Ek het vorendag te kom met wat lyk soos 'n maklike oplossing met behulp van Jdom. Eerder as om direk met behulp van die Jdom iterator, ek gebruik die iterator om 'n lys van nodes te skep en dan deurkruis die gebruik van hierdie lys. Aangesien hierdie lys is nie "live", kan my skrifte die boom te verander (en sien die veranderinge) sonder dat die traversal. Die traversal sal nie sien strukturele veranderinge, maar dat moet nie 'n probleem te wees nie.

Ander wenke

Is daar 'n rede waarom jy kan nie net doen twee passe?

Die meeste algoritmes Ek is vertroud met nie meer as 2 traversals vereis wanneer versier 'n boom (ideaal, moet jou algoritme te slaag vir aanvanklike versiering en miskien 'n tweede vir die oplossing van verwysings na die versiering moet).

Aangesien jy oop is vir die gebruik van ander modelle is, dan kan jy Elliotte Rusty Harold se XOM API. Dit is rock solid, en sal nie toelaat dat jy 'n ongeldige XML struktuur te skep.

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top