مدیریت فایل های XML

برای خواندن و نوشتن فایل‌های XML در جاوا روش‌ها و کتابخانه‌های توکار و خارجی زیادی وجود دارند که با استفاده از آن‌ها می‌توانیم فایل‌های XML را بخوانیم، ایجاد کنیم و یا تحت پرس و جو قرار دهیم، به صورت کلی روش‌های تجزیه فایل‌های XML در جاوا را می‌توان به دو دسته زیر تقسیم کرد :

  • روش‌های مبتنی بر درخت تجزیه
  • روش‌های مبتنی بر استریم

قبل از اینکه با این دو روش آشنا شویم باید با مفهوم تجزیه (parsing) آشنا شویم.

تجزیه (Parsing) فایل‌های XML

به روشی گفته می‌شود که در طی آن در داخل یک فایل یا استریم مبتنی بر XML حرکت می‌کنیم و به المان‌ها، ویژگی‌ها و صفت‌های عناصر xml دسترسی پیدا می‌کنیم و می‌توانیم با آن‌ها به صورت اشیای قابل استفاده در جاوا رفتار کنیم.

تجزیه گر (Parser)

تجزیه گر (Parser) ابزاری است که عمل تجزیه را انجام می‌دهد، این ابزار می‌تواند بر اساس الگوریتم‌های استریمی یا الگوریتم‌های مبتنی بر درخت تجزیه پیاده سازی شود، از تجزیه گرهای مبتنی بر درخت تجزیه می‌توان به DOM Parser و از تجزیه گرهای مبتنی بر استریم می‌توان به SAX Parser اشاره کرد. کتابخانه‌های دیگری همچون JDOM ،StAX و DOM4J نیز تجزیه گرهای دیگری هستند که می‌توان از آن‌ها نام برد. دو راهکار اصلی تجزیه و تحلیل فایل‌های xml در جاوا عبارتند از :

  • راهکار مبتنی بر DOM
  • راهکار مبتنی بر SAX

راهکار مبتنی بر DOM

در این روش درخت تجزیه بر اساس Document Object Model یا انحصاراً DOM که از پیشنهادات W3C است ساخته می‌شود، درخت تجزیه ساختمان داده‌ای پیچیده‌ای است که عناصر فایل XML را به صورت درختی مبتنی بر DOM نگه داری می‌کند.

در این روش یک بار کل محتوای XML خوانده می‌شود و سپس Parser آن را به یک درخت (درخت تجزیه) تبدیل می‌کند، بعد از آن می‌توانیم با دسترسی به گره‌های این درخت فایل XML مورد نظر را بخوانیم، در هنگام استفاده از این روش باید به نکات زیر دقت کنیم :

  • در این روش یک بار محتوای فایل XML به صورت کامل خوانده می‌شود لذا تنها برای مواردی قابل استفاده است که محتوای XML را به صورت کامل در اختیار داریم (مثلاً فایل) و برای مواردی که داده به مرور زمان قابل تغییر باشد قابل استفاده نیست (مثلاً یک استریم قابل تغییر آنلاین)
  • در این روش کل فایل یک بار از ابتدا تا انتها خوانده می‌شود لذا برای مواردی که حجم فایل بزرگ باشد مفید نیست.
  • در این روش یک درخت تجزیه ساخته شده و این درخت در حافظه اصلی (RAM) قرار می‌گیرد که حجم آن ممکن است زیاد باشد لذا ممکن است مصرف حافظه زیادی داشته باشد.
  • مرحله خواندن و تجزیه اولیه در این روش کند است.
  • پس از ساخت درخت تجزیه به دلیل استفاده از ساختار درختی دسترسی به عناصر XML با سرعت بالایی صورت می‌گیرد.

راهکار مبتنی بر SAX

این راهکار یک راهکار استریمی است و معمولاً سریعتر از راهکار قبلی است، در این روش درخت تجزیه ساخته نمی‌شود و در نتیجه مصرف حافظه کمتری دارد، این روش برای مواردی که استریم به مرور زمان بزرگ‌تر می‌شود قابل استفاده است در هنگام استفاده از این روش باید به موارد زیر دقت کنیم :

  • این روش هم با فایل و هم استریم های قابل تغییر سازگار است.
  • برای مواردی که حجم فایل بزرگ باشد قابل استفاده است.
  • نسبت به DOM مصرف حافظه کمتری دارد.
  • مرحله خواندن و تجزیه اولیه در این روش سریعتر است.
  • در این روش دستری به صورت بالا به پایین است و از حالت Random Access پشتیبانی نمی‌کند و اگر قصد داشته باشیم چندین بار به گره‌هایی خاص دسترسی داشته باشیم مفید نیست.