مشاكل مع إعادة كتابة شجرة XML / DOM باستخدام JDOM (ConcurrentModificationException)

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

  •  09-09-2019
  •  | 
  •  

سؤال

أحتاج إلى المشي شجرة Jdom وإجراء تغييرات كما أذهب إلى جانب؛ في هذه المرحلة، تضيف التغييرات في الغالب عناصر جديدة الآن ولكن يمكن أن تشمل أيضا عناصر إعادة ترتيب أو إزالة العناصر. يتم كل العمل على نفس الخيط حتى لا توجد مشاكل التزامن.

يتبذر هذا الأمر صعبا لأن محاميات JDOM يمكنهم رمي ConcurrentModificationException إذا حاولت إضافة عقدة أثناء اجتياز الجواب. من ما أستطيع أن أرىه، يستخدم JDOM قوائم بدلا من ربط عقد الدوم مباشرة وهذا يجعل من الصعب القيام بالتعديلات على الطاير.

لقد رأيت بضع توصيات حول كيفية التعامل مع هذا، مثل تأجيل الزيادة حتى بعد إجراء اجتياز، أو بناء شجرة جديدة على الطيران بحيث تظل الشجرة المفرطة دون تغيير. هذه لن تعمل من أجلي لأنني بحاجة إلى رؤية ثابتة للشجرة وأنا تعديلها.

لقد بدأت أشك في أن JDOM لن تعمل هنا. هل أي من نماذج Java Dom الأخرى تجعل هذا أسهل؟ أم أن هناك طريقة للقيام بذلك في JDOM؟

هل كانت مفيدة؟

المحلول

لقد جئت مع ما يشبه الحل السهل باستخدام JDOM. بدلا من استخدام جهاز iTerator JDG مباشرة، يمكنني استخدام IMERATOR لإنشاء قائمة من العقد ثم اجتياز استخدام هذه القائمة. نظرا لأن هذه القائمة ليست "تعيش"، فيمكن لبرامج النصوص الخاصة بي تعديل الشجرة (ومعرفة التغييرات) دون التأثير على اجتياز. لن يرى اجتياز تغييرات هيكلية ولكن لا ينبغي أن تكون مشكلة.

نصائح أخرى

هل هناك سبب لا يمكنك ببساطة القيام بتمرير؟

معظم الخوارزميات التي أنا على دراية لن تتطلب أكثر من 2 اجملين عند تزيين شجرة (من الناحية المثالية، يجب أن يحتاج خوارزميةك إلى تمرير للديكور الأولي وربما ثانية لحل المراجع بعد الزخرفة).

نظرا لأنك منفتحون لاستخدام نماذج أخرى، فقد تفكر في Elliotte Rusty Harold XOM. API. انها صخرة صلبة، ولن تسمح لك بإنشاء بنية XML غير صالحة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top