JDOM을 사용한 XML/DOM 트리 재 작성 문제 (ConcurrentModificationException)

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

  •  09-09-2019
  •  | 
  •  

문제

나는 jdom 나무를 걸어 가고 내가 갈 때 변화를해야합니다. 이 시점에서 변경 사항은 대부분 새로운 요소를 추가하고 있지만 요소를 재정렬하거나 요소를 제거 할 수도 있습니다. 모든 작업은 동일한 스레드에서 수행되므로 동시성 문제가 없습니다.

JDOM 반복자가 Traversal 중에 노드를 추가하려고하면 동시 모형화 소집을 던질 수 있기 때문에 어려운 것으로 나타났습니다. 내가 볼 수있는 바에 따르면, JDOM은 DOM 노드를 직접 연결하는 대신 목록을 사용하여 즉시 수정하기가 어렵습니다.

나는이를 처리하는 방법에 대한 몇 가지 권장 사항을 보았습니다. 예를 들어 횡단이 끝날 때까지 추가를 연기하거나 횡단 나무가 변하지 않도록 즉석에 새 나무를 건설했습니다. 나무를 수정할 때 나무의 일관된 견해가 필요하기 때문에 이것들은 나에게 효과가 없습니다.

나는 JDOM이 여기서 작동하지 않을 것이라고 의심하기 시작했습니다. 다른 Java Dom 모델 중 하나가 더 쉽게 만들 수 있습니까? 아니면 JDOM 에서이 작업을 수행 할 수있는 방법이 있습니까?

도움이 되었습니까?

해결책

나는 JDOM을 사용하여 쉬운 솔루션처럼 보이는 것을 생각해 냈습니다. JDOM 반복기를 직접 사용하지 않고 반복자를 사용하여 노드 목록을 작성한 다음이 목록을 사용하여 트래버스를 사용합니다. 이 목록은 "라이브"가 아니기 때문에 내 스크립트는 트래버스에 영향을 미치지 않고 트리를 수정하고 변경을 볼 수 있습니다. 횡단은 구조적 변화를 보지 못하지만 문제가되지 않아야합니다.

다른 팁

단순히 두 번의 패스를 할 수없는 이유가 있습니까?

내가 익숙한 대부분의 알고리즘은 나무를 장식 할 때 2 개 이상의 트래버스가 필요하지 않습니다 (이상적으로는 알고리즘은 초기 장식을위한 패스와 장식 후 참조를 해결하기 위해 1 초가 필요합니다).

다른 모델을 사용할 수 있으므로 Elliotte Rusty Harold 's를 고려할 수 있습니다. xom API. 그것은 견고하며 유효하지 않은 XML 구조를 만들 수는 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top