روش های پردازش xml در c. نحوه باز کردن یک سند XML - ویژگی های کار با فایل های XML. ایجاد یک عنصر XML با کودکان




زبان نشانه گذاری توسعه پذیر (XML). اینها در واقع فقط فایل های متنی هستند که از برچسب های سفارشی برای توصیف ساختار و سایر عملکردهای سند استفاده می کنند.

XML چیست

XMLیک زبان نشانه گذاری است که توسط کنسرسیوم وب جهانی (W3C) برای تعریف یک نحو برای رمزگذاری اسنادی که توسط انسان ها و ماشین ها قابل خواندن است ایجاد شده است. این کار را از طریق برچسب ها انجام می دهد که ساختار سند و همچنین نحوه ذخیره و انتقال سند را مشخص می کند.

ساده ترین راه برای مقایسه آن با زبان نشانه گذاری دیگری که ممکن است با آن آشنا باشید این است نشانه گذاری فرامتن(HTML) برای رمزگذاری صفحات وب استفاده می شود. HTML از مجموعه ای از کاراکترهای نشانه گذاری (کدهای کوتاه) از پیش تعریف شده استفاده می کند که قالب محتوای یک صفحه وب را توصیف می کند.

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

اساسا، HTML زبانی است که بر ارائه محتوا تمرکز دارد، در حالی که XML یک زبان توصیف داده اختصاصی است که برای ذخیره داده ها استفاده می شود.

XML اغلب به عنوان پایه ای برای سایر قالب های سند استفاده می شود که صدها مورد از آنها وجود دارد. در اینجا چند مورد وجود دارد که ممکن است بخواهید بدانید:

  • RSS و ATOM توضیح می دهند که چگونه برنامه ها باید فیدهای وب را مدیریت کنند.
  • مایکروسافت دات نت از XML برای فایل های پیکربندی خود استفاده می کند.
  • مایکروسافت آفیس از XML به عنوان پایه ساختار سند استفاده می کند.

بنابراین، اگر یک فایل XML دارید، لزوماً به شما نمی گوید که برای چه برنامه ای است. با این حال، لازم نیست نگران این موضوع باشید، مگر اینکه در حال توسعه فایل‌های XML باشید.

نحوه باز کردن یک فایل XML

راه های مختلفی برای باز کردن مستقیم یک فایل XML وجود دارد. شما می توانید آنها را با هر ویرایشگر متنی باز و ویرایش کنید، آنها را با هر مرورگر وب مشاهده کنید، یا از وب سایتی استفاده کنید که به شما امکان مشاهده، ویرایش و حتی تبدیل آنها به فرمت های دیگر را می دهد.

هنگام کار منظم با XML از یک ویرایشگر متن استفاده کنید

از آنجایی که فایل های XML صرفاً فایل های متنی هستند، می توان آنها را در هر ویرایشگر متنی باز کرد. با این حال، بسیاری از ویرایشگرهای متن، مانند Notepad، به سادگی برای نمایش فایل های XML با ساختار صحیح خود طراحی نشده اند. این می تواند برای آشنایی سریع با محتویات یک فایل XML مفید باشد. اما ابزارهای راحت تری برای کار با آنها وجود دارد.


استفاده از مرورگر وب برای مشاهده یک فایل XML

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

اگر نه، می‌توانید روی فایل کلیک راست کنید تا گزینه‌هایی برای باز کردن آن با هر برنامه دیگری پیدا کنید. به سادگی مرورگر وب خود را از لیست برنامه ها انتخاب کنید.

هنگامی که فایل باز می شود، باید داده های ساختار یافته را ببینید. به زیبایی ظاهر رنگی که در Notepad++ دارید نیست، اما از notepad بسیار بهتر است.

استفاده از ویرایشگر آنلاین برای فایل های XML

اگر می خواهید یک فایل XML تصادفی را ویرایش کنید و نمی خواهید یک ویرایشگر متن جدید دانلود کنید، یا نیاز دارید تبدیل فایل xml به فرمت دیگرچندین ویرایشگر XML آنلاین مناسب به صورت رایگان وجود دارد.

TutorialsPoint.com، XMLGrid.net و CodeBeautify.org - به شما امکان می دهد فایل های XML را مشاهده و ویرایش کنید. پس از تکمیل ویرایش، می توانید فایل XML اصلاح شده را دانلود کنید یا حتی آن را به فرمت دیگری تبدیل کنید.

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

به عنوان مثال، در تصویر زیر، فایل XML کامل ما در سمت چپ است، و پنجره نتایج یک نمای درختی را نشان می دهد، زیرا روی دکمه Tree View در وسط کلیک کردیم.

از دکمه Browse برای بارگیری یک فایل XML از رایانه خود یا دکمه Load URL برای بازیابی XML از یک منبع آنلاین استفاده کنید.

دکمه Tree View داده‌ها را در یک ساختار درختی با فرمت مناسب در صفحه نتایج نمایش می‌دهد که همه برچسب‌ها با رنگ نارنجی و ویژگی‌ها در سمت راست برچسب‌ها برجسته شده‌اند.

Beatify داده های شما را در قالبی منظم و خوانا نمایش می دهد.

دکمه Minify داده های شما را با کمترین فاصله ممکن نمایش می دهد. این تابع هر قطعه داده را در یک خط قرار می دهد. این در هنگام تلاش برای کوچکتر کردن یک فایل مفید خواهد بود که باعث صرفه جویی در فضا می شود.

در نهایت، می‌توانید از دکمه XML به JSON برای تبدیل فرمت XML به JSON و دکمه Export به CSV برای ذخیره داده‌ها به‌عنوان فایل مقادیر جدا شده با کاما یا دکمه دانلود برای دانلود هر تغییری که در قالب جدید ایجاد کرده‌اید استفاده کنید. فایل XML.

احتمالاً نام XML را شنیده اید و دلایل زیادی را می دانید که چرا باید از آن در سازمان خود استفاده شود. اما واقعا XML چیست؟ این مقاله توضیح می دهد که XML چیست و چگونه کار می کند.

در این مقاله

نشانه گذاری ها، نشانه گذاری ها و برچسب ها

برای درک XML، به یاد داشته باشید که چگونه می توانید داده ها را برچسب گذاری کنید. اسناد و مدارک توسط مردم در طی قرن‌های متمادی ایجاد شده‌اند و در طول آن زمان مردم روی آنها یادداشت‌برداری می‌کنند. به عنوان مثال، معلمان اغلب کار دانش‌آموز را علامت‌گذاری می‌کنند تا نیاز به جابجایی پاراگراف‌ها، واضح‌تر کردن جمله، تصحیح غلط‌های املایی و غیره را نشان دهند. علامت‌گذاری یک سند می‌تواند به تعیین ساختار، معنا و ظاهر اطلاعات کمک کند. اگر تا به حال از ویرایش‌ها در Microsoft Office Word استفاده کرده‌اید، پس با فرم نشانه‌گذاری رایانه‌ای آشنا هستید.

در دنیای فناوری اطلاعات، اصطلاح "برچسب گذاری" به اصطلاح "نشانه گذاری" تبدیل شده است. نشانه گذاری از کدهایی به نام تگ (یا گاهی اوقات توکن) برای تعریف ساختار، ظاهر بصری و - در مورد XML - معنای داده ها استفاده می کند.

متن HTML این مقاله نمونه خوبی از استفاده از نشانه گذاری کامپیوتری است. اگر روی این صفحه در Microsoft Internet Explorer راست کلیک کرده و انتخاب کنید مشاهده کد HTML، متن قابل خواندن و برچسب های HTML مانند را خواهید دید

و

. در اسناد HTML و XML، برچسب ها به راحتی قابل تشخیص هستند زیرا در براکت های زاویه ای محصور شده اند. در متن منبع این مقاله، تگ های HTML عملکردهای زیادی را انجام می دهند، مانند تعریف ابتدا و انتهای هر پاراگراف (

...

) و محل نقشه ها.

ویژگی های XML

اسناد HTML و XML حاوی داده‌هایی هستند که در برچسب‌ها محصور شده‌اند، اما شباهت‌های این دو زبان در اینجا به پایان می‌رسد. در قالب HTML، برچسب ها طراحی داده ها را تعیین می کنند - محل سرفصل ها، ابتدای یک پاراگراف و غیره. در قالب XML، برچسب ها ساختار و معنای داده ها را تعیین می کنند - چیست.

با توصیف ساختار و معنای داده ها، استفاده مجدد از آن به روش های مختلف امکان پذیر می شود. به عنوان مثال، اگر بلوکی از داده های فروش دارید که در آن هر عنصر به وضوح تعریف شده است، می توانید فقط عناصر لازم را در گزارش فروش بارگذاری کنید و سایر داده ها را به پایگاه داده حسابداری منتقل کنید. به عبارت دیگر، شما می توانید از یک سیستم برای تولید و برچسب گذاری داده ها در فرمت XML استفاده کنید و سپس آن داده ها را در هر سیستم دیگری بدون در نظر گرفتن پلت فرم مشتری یا سیستم عامل پردازش کنید. این سازگاری XML را به یکی از محبوب ترین فناوری های تبادل داده تبدیل می کند.

لطفا هنگام کار به موارد زیر توجه کنید:

    HTML را نمی توان به جای XML استفاده کرد. با این حال، داده های XML را می توان در تگ های HTML محصور کرد و در صفحات وب نمایش داد.

    قابلیت های HTML محدود به مجموعه ای از تگ های از پیش تعریف شده است که برای همه کاربران مشترک است.

    قوانین XML به شما این امکان را می دهد که هر تگ مورد نیاز برای توصیف داده ها و ساختار آن را ایجاد کنید. فرض کنید باید اطلاعاتی در مورد حیوانات خانگی خود ذخیره و به اشتراک بگذارید. برای این کار می توانید کد XML زیر را ایجاد کنید:

    ایزی سیامی 6 آره نه Izz138bod کالین ویلکاکس

همانطور که می بینید، تگ های XML مشخص می کنند که چه داده هایی را مشاهده می کنید. به عنوان مثال، واضح است که داده ها در مورد یک گربه هستند و شما به راحتی می توانید نام، سن و غیره آن را تعیین کنید. زیرا می توانید برچسب هایی ایجاد کنید که تقریباً هر ساختار داده ای را تعریف می کند، XML قابل توسعه است.

اما تگ های این مثال را با تگ های موجود در فایل HTML اشتباه نگیرید. به عنوان مثال، اگر متن XML بالا در یک فایل HTML جایگذاری شود و در یک مرورگر باز شود، نتایج به صورت زیر خواهد بود:

Izzy Siamese 6 بله خیر Izz138bod Colin Wilcox

مرورگر وب تگ های XML را نادیده می گیرد و فقط داده ها را نمایش می دهد.

داده های خوب شکل گرفته

احتمالاً شنیده اید که شخصی در IT در مورد یک فایل XML "خوب شکل گرفته" صحبت می کند. یک فایل XML به خوبی شکل گرفته باید از قوانین بسیار سختگیرانه پیروی کند. اگر از این قوانین پیروی نکند، XML کار نمی کند. به عنوان مثال، در مثال قبلی، هر تگ بازکننده دارای یک تگ بسته شدن مربوطه است، بنابراین این مثال از یکی از قوانین یک فایل XML خوش فرم پیروی می کند. اگر یک برچسب را از یک فایل حذف کنید و سعی کنید آن را در یکی از برنامه های آفیس باز کنید، یک پیغام خطا ظاهر می شود و استفاده از چنین فایلی غیرممکن خواهد بود.

شما نیازی به دانستن قوانین ایجاد یک فایل XML خوش فرم ندارید (اگرچه درک آنها دشوار نیست)، اما به یاد داشته باشید که فقط داده های XML به خوبی شکل گرفته می توانند در برنامه ها و سیستم های دیگر استفاده شوند. اگر فایل XML باز نمی شود، احتمالاً بدشکل است.

XML مستقل از پلتفرم است، به این معنی که هر برنامه طراحی شده برای استفاده از XML می تواند داده های XML را بدون در نظر گرفتن سخت افزار یا سیستم عامل بخواند و پردازش کند. به عنوان مثال، اگر تگ های XML مناسب را اعمال کنید، می توانید از یک برنامه دسکتاپ برای باز کردن و پردازش داده های دریافتی از رایانه اصلی استفاده کنید. و صرف نظر از اینکه چه کسی داده های XML را ایجاد کرده است، داده ها را می توان در انواع برنامه های Office دستکاری کرد. XML به دلیل سازگاری خود به یکی از محبوب ترین فناوری ها برای تبادل داده بین پایگاه های داده و رایانه های کاربر تبدیل شده است.

علاوه بر داده‌های برچسب‌گذاری شده خوب، سیستم‌های XML معمولاً از دو جزء اضافی استفاده می‌کنند: طرحواره‌ها و تبدیل‌ها. بخش های زیر نحوه کار آنها را توضیح می دهد.

طرح

از اصطلاح "طرح" نترسید. طرحواره به سادگی یک فایل XML است که حاوی قوانینی برای محتویات فایل داده XML است. فایل های طرحواره معمولا پسوند XSD دارند، در حالی که فایل های داده XML از پسوند XML استفاده می کنند.

طرحواره ها به برنامه ها اجازه می دهند تا داده ها را تأیید کنند. آنها ساختار داده ها را تشکیل می دهند و قابل درک بودن آن را برای سازنده و سایر افراد تضمین می کنند. به عنوان مثال، اگر کاربر داده های نامعتبر، مانند متن در فیلد تاریخ را وارد کند، ممکن است برنامه از کاربر بخواهد که آن را تصحیح کند. اگر داده های موجود در یک فایل XML با قوانین موجود در طرح مطابقت دارد، می توانید از هر برنامه ای که XML را فعال کرده است برای خواندن، تفسیر و پردازش آن استفاده کنید. به عنوان مثال، همانطور که در تصویر زیر نشان داده شده است، اکسل می تواند داده ها را تأیید کند برای انطباق با طرح CAT.

مدارها می توانند پیچیده باشند و این مقاله نمی تواند نحوه ایجاد آنها را توضیح دهد. (همچنین، احتمالاً افراد فناوری اطلاعات در سازمان شما وجود دارند که می دانند چگونه این کار را انجام دهند.) با این حال، دانستن اینکه نمودارها چگونه هستند مفید است. نمودار زیر قوانین مجموعه ای از برچسب ها را تعریف می کند ... :

اگر مثال واضح نیست نگران نباشید. فقط به موارد زیر توجه کنید:

    عناصر رشته ای در طرح مثال، اعلان نامیده می شوند. اگر اطلاعات اضافی در مورد حیوان مورد نیاز بود، مانند رنگ یا ویژگی های خاص آن، بخش فناوری اطلاعات اعلامیه های مناسب را به نمودار اضافه می کرد. سیستم XML را می توان با تکامل نیازهای کسب و کار تغییر داد.

    اعلان ها ابزار قدرتمندی برای دستکاری ساختار داده ها هستند. مثلا یک تبلیغ به این معنی است که برچسب هایی مانند و ، باید به ترتیب بالا عمل کند. تبلیغات همچنین می توانند انواع ورودی های کاربر را تأیید کنند. به عنوان مثال، مدار فوق به یک ورودی عدد صحیح مثبت برای سن گربه و مقادیر بولی (TRUE یا FALSE) برای تگ های ALTERED و DECLAWED نیاز دارد.

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

تحولات

همانطور که در بالا توضیح داده شد، XML همچنین امکان استفاده کارآمد و استفاده مجدد از داده ها را فراهم می کند. مکانیسم استفاده مجدد از داده ها تبدیل XSLT (یا به سادگی تبدیل) نامیده می شود.

شما (یا بخش فناوری اطلاعات شما) همچنین می توانید از تبدیل ها برای تبادل داده بین سیستم های پشتیبان مانند پایگاه های داده استفاده کنید. بیایید فرض کنیم که پایگاه داده A داده های فروش را در جدولی ذخیره می کند که برای بخش فروش مفید است. پایگاه داده B داده های درآمد و هزینه را در جدولی که به طور خاص برای حسابداری طراحی شده است ذخیره می کند. پایگاه داده B می تواند از یک تبدیل برای گرفتن داده ها از پایگاه A و قرار دادن آن در جداول مناسب استفاده کند.

ترکیبی از فایل داده، طرحواره و تبدیل، سیستم اصلی XML را تشکیل می دهد. شکل زیر عملکرد چنین سیستم هایی را نشان می دهد. فایل داده بر اساس قوانین طرحواره بررسی می شود و سپس به هر روش مناسب برای تبدیل ارسال می شود. در این حالت، تبدیل داده ها را در یک جدول در یک صفحه وب قرار می دهد.

مثال زیر تبدیلی را نشان می دهد که داده ها را بارگذاری می کند در یک جدول در یک صفحه وب هدف مثال توضیح چگونگی ایجاد تبدیل نیست، بلکه نشان دادن یکی از اشکالی است که می توانند داشته باشند.

نام نژاد سن تغییر یافته است کلاف شده مجوز مالک

این مثال نشان می‌دهد که متن یک نوع تغییر شکل ممکن است چگونه باشد، اما به یاد داشته باشید که ممکن است به توضیح واضحی از آنچه از داده‌ها نیاز دارید محدود شده باشید، و این توصیف می‌تواند به زبان مادری شما انجام شود. به عنوان مثال، ممکن است به بخش فناوری اطلاعات بروید و بگویید که آنها باید داده های فروش را برای مناطق خاص در دو سال گذشته چاپ کنند و اطلاعات باید اینگونه باشد. سپس بخش می تواند تغییر شکل را بنویسد (یا اصلاح کند) تا درخواست شما را برآورده کند.

مایکروسافت و تعداد فزاینده‌ای از شرکت‌های دیگر در حال ایجاد تغییرات برای اهداف مختلف هستند و استفاده از XML را راحت‌تر می‌کنند. در آینده، احتمالاً می‌توانید تبدیلی را که متناسب با نیازهای شما باشد با سفارشی‌سازی کمی یا بدون سفارشی‌سازی اضافی دانلود کنید. این بدان معناست که با گذشت زمان، استفاده از XML کمتر و ارزان تر می شود.

XML در سیستم مایکروسافت آفیس

نسخه های حرفه ای آفیس پشتیبانی پیشرفته XML را ارائه می دهند. با شروع سیستم Microsoft Office 2007، مایکروسافت آفیس از فرمت های فایل مبتنی بر XML مانند DOCX، XLSX و PPTX استفاده می کند. از آنجایی که XML داده ها را در قالب متنی به جای یک فرمت باینری اختصاصی ذخیره می کند، مشتریان می توانند طرحواره های خود را تعریف کنند و از داده های شما به روش های مختلف بدون نیاز به پرداخت حق امتیاز استفاده کنند. برای اطلاعات بیشتر در مورد فرمت های جدید، به باز کردن فرمت های XML و پسوندهای نام فایل مراجعه کنید. در زیر سایر مزایای آن آورده شده است.

همه اینها عالی است، اما اگر داده های XML بدون طرحواره داشته باشید، چه؟ این بستگی به این دارد که از کدام برنامه آفیس استفاده می کنید. به عنوان مثال، هنگامی که یک فایل XML را بدون طرحواره در اکسل باز می کنید، فرض می کند که این طرح وجود دارد و به شما امکان می دهد داده ها را در یک جدول XML بارگذاری کنید. می توانید از لیست ها و جداول XML برای مرتب سازی، فیلتر کردن و محاسبه داده ها استفاده کنید.

ویژگی های XML را در آفیس فعال کنید

به طور پیش فرض، تب Developer قابل مشاهده نیست. برای استفاده از دستورات XML در آفیس باید به نوار اضافه شود.

مقاله قبلی مفاهیم کلی در مورد XML را شرح داد. در این مقاله نحوه انجام اقدامات اساسی مربوط به تغییر، افزودن، جستجو در یک فایل XML را یاد خواهیم گرفت.

فایل XML که برای مثال استفاده می شود.

مزدا 2007 بی ام و 2009

xml dom

در حال حاضر، فایل ما شامل ساختار زیر است:

رابطه بین گره ها در XML DOM، لحظات اساسی:

1. هر گره در درخت DOM یک ParentNode والد دارد. در مثال ما، گاراژ والد هر دو عنصر خودرو است، و هر دو عنصر خودرو، به نوبه خود، والدین عناصر مدل و سال هستند.

چگونه المنت والد خودرو xml را بدست آوریم؟

Console.WriteLine(elmRoot["car"].ParentNode.Name); //نتیجه: گاراژ

2. والدین می توانند ChildNodes فرزندان داشته باشند. به عنوان مثال، برای گره گاراژ، کودکان هر دو عنصر ماشین هستند. عناصر خودرو نیز دارای مدل و سال کودک هستند.

ChildNodes، مجموعه ای است که تمام عناصر xml را ذخیره می کند تا به عنصر مورد نظر دسترسی داشته باشید، باید شاخص آن را مشخص کنید. (شاخص همیشه از صفر شروع می شود!)

به عنوان مثال: چگونه اولین عنصر فرزند را بدست آوریم؟

ElmRoot.ChildNodes;

3. مانند زندگی معمولی، کودک می تواند اولین فرزند اول یا آخرین فرزند آخر به دنیا بیاید.

اگر عنصر خودرو را به عنوان مثال در نظر بگیریم، پس

FirstChild مدل LastChild سال است

4. به نوبه خود، بین عناصر کودک نیز پیوندهایی وجود دارد که می توانند برادر یا خواهر باشند.

یک کودک ممکن است، برای مثال، یک برادر خواهر و برادر قبلی و یک برادر خواهر و برادر بعدی داشته باشد

Console.WriteLine(elmRoot.ChildNodes.FirstChild.NextSibling.Name); //نتیجه: سال Console.WriteLine(elmRoot.ChildNodes.LastChild.PreviousSibling.Name); //نتیجه: مدل

اگر عنصر پیدا نشد، یک استثنا پرتاب می شود: NullReferenceException، بنابراین هنگام کار با xml، همیشه از بلوک های try catch استفاده کنید.

Console.WriteLine(elmRoot.ChildNodes. LastChild.NextSibling.Name); Console.WriteLine(elmRoot.ChildNodes. FirstChild.PreviousSibling.Name);

LastChild برادر بعدی است.
FirstChild خواهر و برادر قبلی است.

با استفاده از روش هایی که در بالا توضیح داده شد، می توانید به راحتی به گره مورد نظر بروید و هر مقداری که نیاز دارید را بدست آورید.

چگونه مقدار یک عنصر xml را بدست آوریم؟

مقدار xml یک عنصر را می توان با استفاده از ویژگی InnerText به دست آورد، برای مثال:

Console.WriteLine(elmRoot["car"].FirstChild.InnerText); //نتیجه: مزدا

راه دیگری برای بدست آوردن همان مقدار عنصر xml:

Console.WriteLine(elmRoot.FirstChild.FirstChild.InnerText); //نتیجه: مزدا

دنباله حرکات در امتداد درخت DOM:

گاراژ -> ماشین -> مدل -> مزدا

سال را می گیریم:

ElmRoot["car"].LastChild.InnerText; //نتیجه: 2007

دنباله:

گاراژ -> ماشین -> سال -> 2007

مثال دیگر: 3 راه برای رسیدن به نتیجه مشابه.

Console.WriteLine(elmRoot.LastChild.FirstChild.InnerText); Console.WriteLine(elmRoot["car"].NextSibling.FirstChild.InnerText); Console.WriteLine(elmRoot.ChildNodes.Item(1).FirstChild.InnerText); //نتیجه: BMW

اگر باید سال را برای عنصری با مقدار مزدا دریافت کنید:

Console.WriteLine(elmRoot.FirstChild.LastChild.InnerText); //نتیجه: 2007

برای BMW (دو راه، همان نتیجه را بگیرید)

Console.WriteLine(elmRoot.ChildNodes.Item(1).ChildNodes.Item(1).InnerText); Console.WriteLine(elmRoot.ChildNodes.ChildNodes.InnerText); //نتیجه: 2009

چگونه مقادیر عناصر xml را تغییر دهیم؟

استفاده از اموال InnerText()می توانید هم مقدار یک عنصر xml را دریافت کنید و هم مقدار آن را تغییر دهید، مثلاً سال را تغییر دهید.

//تنظیم یک مقدار جدید elmRoot.FirstChild.LastChild.InnerText = "2010"; //نمایش مقدار جدید در صفحه کنسول Console.WriteLine(elmRoot.FirstChild.ChildNodes.Item(1).InnerText); //نتیجه: 2010

در عین حال، باید به یاد داشته باشید که تمام تغییرات با فایل xml مجازی رخ می دهد، اگر فایل فیزیکی را باز کنید، خواهید دید که سال 2007 هنوز در آن مشخص شده است.

برای اعمال تغییرات، باید از روش Save استفاده کنید، برای مثال:

ElmRoot.Save ("نام فایل xml یا جریان");

اکنون اطلاعات در فایل xml "فیزیکی" تغییر خواهد کرد.

چگونه تعداد عناصر فرزند را بدست آوریم؟

Console.WriteLine(elmRoot.FirstChild.ChildNodes.Count);

گاراژ -> ماشین شامل 2 فرزند: مدل و سال

Console.WriteLine(elmRoot.FirstChild.FirstChild.ChildNodes.Count);

گاراژ -> ماشین -> مدل شامل 1 عنصر xml فرزند است.

دسترسی به عناصر کودک

بر اساس شاخص

ElmRoot.ChildNodes.Name; elmRoot.ChildNodes.Name; //نتیجه: ماشین

با استفاده از یک حلقه

Foreach (نود XmlNode در elmRoot.ChildNodes) ( Console.WriteLine(nod.Name); ) //نتیجه: ماشین، ماشین

چگونه نام عنصر xml را بدست آوریم؟

elmRoot.Name; //نتیجه: گاراژ

ایجاد یک عنصر XML جدید

بیایید یک عنصر جدید در سند XML خود ایجاد کنیم تا با دو مورد دیگر (ماشین) متفاوت باشد، بیایید آن را bus بنامیم.

هنگام ایجاد یک عنصر جدید، از توصیه وب سایت msdn و به جای استاندارد جدید XmlElement از متد CreateElement استفاده می کنیم.

XmlElement elm = xmlDoc.CreateElement("bus");

ایجاد و افزودن یک عنصر xml جدید

بیایید یک عنصر xml جدید با نام "BUS" ایجاد کنیم.

XmlElement elmRoot = xmlDoc.DocumentElement; Console.WriteLine(elmRoot.ChildNodes.Count); //car, car XmlElement elmNew = xmlDoc.CreateElement("bus"); elmRoot.AppendChild(elmNew); Console.WriteLine(elmRoot.ChildNodes.Count); //3 ماشین، ماشین، اتوبوس xmlDoc.Save("نام فایل xml");

توضیح:

1. ابتدا یک عنصر ریشه به دست می آوریم که عناصر جدید را به آن متصل می کنیم.

2. به عنوان یک بررسی، تعداد فعلی عناصر فرزند عنصر گاراژ را نمایش خواهیم داد: 2 (ماشین و ماشین)

3. یک عنصر BUS جدید ایجاد کنید

4. استفاده از روش AppendChildاضافه کردن یک عنصر جدید به درخت

5. بیایید دوباره از چک استفاده کنیم و تعداد عناصر فعلی را برای عنصر گاراژ نمایش دهیم، اکنون 3 مورد از آنها وجود دارد: ماشین، ماشین، اتوبوس.

6. برای اینکه تغییرات روی فایل فیزیکی تاثیر بگذارد، ذخیره کنید

در خود فایل XML، عنصر جدید به شکل زیر خواهد بود:

چگونه یک عنصر xml جدید اضافه کنیم؟

وظیفه: یک عنصر XML جدید ایجاد کنید و مقداری محتوای متنی به آن اضافه کنید، به عنوان مثال سال ساخت.

String strFilename = @"C:\lessons\Auto.xml"; XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(strFilename); XmlElement elmRoot = xmlDoc.DocumentElement; XmlElement elmNew = xmlDoc.CreateElement("bus"); XmlText new_txt = xmlDoc.CreateTextNode("2006"); elmRoot.AppendChild(elmNew); elmRoot.LastChild.AppendChild(new_txt); Console.WriteLine(elmRoot.ChildNodes.Name); //bus Console.WriteLine(elmRoot.ChildNodes.LastChild.InnerText); //2006 Console.Read();

در فایل XML:

2006

برای شفافیت

حالا بیایید یک گره اتوبوس با معماری مشابه ماشین ایجاد کنیم، یعنی گره‌ها را اضافه کنیم: مدل، سال و مقداری محتوای متنی.

ایجاد یک عنصر XML با کودکان

string strFilename = @"C:\lessons\Auto.xml"; //ایجاد یک سند xml جدید در حافظه XmlDocument xmlDoc = new XmlDocument(); //فایل xml را در حافظه بارگذاری کنید xmlDoc.Load(strFilename); //دریافت عنصر ریشه XmlElement elmRoot = xmlDoc.DocumentElement; //ایجاد 3 عنصر: اتوبوس، مدل، سال XmlElement elmBUS = xmlDoc.CreateElement("bus"); XmlElement elmModel = xmlDoc.CreateElement("model"); XmlElement elmYear = xmlDoc.CreateElement("year"); //تنظیم مقادیر برای عناصر: مدل، سال XmlText year_txt = xmlDoc.CreateTextNode("2006"); //XmlText mod_txt = xmlDoc.CreateTextNode("liaz"); در غیر این صورت اضافه کنید //دو عنصر فرزند را به عنصر اتوبوس اضافه کنید: model و سال elmBUS.AppendChild(elmModel); elmBUS.AppendChild(elmYear); //به گره های مدل و سال مقادیر اضافه کنید elmModel.InnerText = "liaz"; elmYear.AppendChild(year_txt); //یک گذرگاه عنصر xml جدید به درخت elmRoot اضافه کنید.AppendChild(elmBUS); //بررسی کنید که آیا همه چیز همانطور که باید اضافه شده است Console.WriteLine(elmRoot.ChildNodes.FirstChild.InnerText); Console.WriteLine(elmRoot.LastChild.LastChild.InnerText); //اگر همه چیز مرتب است، از روش Save استفاده کنید xmlDoc.Save("xml file name");

نتیجه:

لیاز 2006

چگونه می توانم این کد را کوتاه کنم؟ به عنوان مثال به صورت زیر:

String PathXmlFile = @"C:\lessons\Auto.xml"; XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(PathXmlFile); XmlElement elmRoot = xmlDoc.DocumentElement; XmlElement elmBUS = xmlDoc.CreateElement("bus"); XmlElement elmModel = xmlDoc.CreateElement("model"); XmlElement elmYear = xmlDoc.CreateElement("year"); //به گره های مدل و سال مقادیر اضافه کنید elmModel.InnerText = "liaz"; elmYear.InnerText = "2006"; elmBUS.AppendChild(elmModel); elmBUS.AppendChild(elmYear); elmRoot.AppendChild(elmBUS); //اگر همه چیز درست است، متد Save را فراخوانی کنید xmlDoc.Save("xml file name");

بیایید کد را کمی بیشتر کوتاه کنیم، برای انجام این کار از ویژگی InnerXml استفاده می کنیم:

XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(PathXmlFile); XmlElement elmXML = xmlDoc.CreateElement("bus"); string txt = " لیاز" + "2006"; //InnerXml! elmXML.InnerXml = txt؛ //xmlDoc.DocumentElement (برابر با گاراژ خواهد بود) - این روش دیگری برای دسترسی به عنصر ریشه است، مانند XmlElement elmRoot = xmlDoc.DocumentElement؛ xmlDoc.DocumentElement.AppendChild (elmXML)؛ xmlDoc.Save(PathXmlFile);

نتیجه

با استفاده از GetElementByTagName فهرستی از عناصر را دریافت کنید

GetElementByTagName برمی گرداند XmlNodeList، که شامل تمام عناصر نسل متعلق به عنصر مشخص شده است، به عنوان مثال، ما باید تمام مدل های ماشین ذخیره شده در گاراژ را دریافت کنیم:

XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(strFilename); XmlNodeList modelName = xmlDoc.GetElementsByTagName("model"); foreach (گره XmlNode در modelName) ( Console.WriteLine(node.InnerText); ) //نتیجه: mazda، bmw، liaz

دسترسی با استفاده از فهرست:

String PathXmlFile = @"C:\lessons\Auto.xml"; XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(PathXmlFile); XmlNodeList modelName = xmlDoc.GetElementsByTagName("model"); Console.WriteLine(modelName.InnerText); //نتیجه: liaz

چگونه می توانم محتوای متنی یک عنصر "bus" جدید ایجاد شده را با استفاده از روش GetElementByTagName تغییر دهم؟

String PathXmlFile = @"C:\lessons\Auto.xml"; XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(PathXmlFile); XmlNodeList modelName = xmlDoc.GetElementsByTagName("model"); Console.WriteLine(modelName.InnerText); //دریافت مقدار: liaz

یا می توانید نام لیاز را به ایکاروس تغییر دهید

Console.WriteLine(modelName.InnerText = "Ikarus");

مدت زیادی از زمانی که قول دادم در مورد کار با داده ها در قالب XML در هنگام توسعه برنامه های NET صحبت کنم می گذرد. باید به وعده ها عمل کرد. لطفاً توجه داشته باشید که هدف این مقاله توسعه دهندگان حرفه ای دات نت نیست، بلکه کسانی هستند که هنوز تجربه قابل توجهی در ایجاد برنامه های NET ندارند.


چرا باید با XML کار کنیم؟

اگر هنوز ایده خیلی خوبی از چیستی XML ندارید، توصیه می کنم مقاله "XML جدی است و برای مدت طولانی" در "KV" شماره 2007 را بخوانید. برای صرفه جویی در فضا برای چیزهای مهم تر، خود قالب XML در اینجا تجزیه و تحلیل نمی شود.

قبل از شروع آشنایی با کد برنامه، باید به یک سوال اساسی پاسخ دهید: چرا حتی پشتیبانی XML را در برنامه خود قرار دهید؟ فکر می‌کنم بسیاری از افراد در مورد بسیاری از فناوری‌ها این سوال را از خود پرسیده‌اند، و همه آنها پس از پاسخ در برنامه‌ها گنجانده نشده‌اند. با این حال، با XML وضعیت تا حدودی متفاوت است، و دلایل واقعی برای استفاده از این فرمت در بسیاری از موقعیت ها وجود دارد.

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

البته، از سوی دیگر، XML چندان مقرون به صرفه نیست، زیرا همانطور که یکی از بازدیدکنندگان انجمن اخبار کامپیوتر زمانی به درستی اشاره کرد، اسناد XML اغلب از 10٪ داده و 90٪ برچسب ها تشکیل شده است. با این حال، این تا حد زیادی به برچسب هایی که انتخاب می کنید بستگی دارد. می توانید بنویسید خیابان ملنیکایت، 2، ایا می تونم . اگر چه، صادقانه بگویم، به نظر من با هارد دیسک های فعلی و کانال های ضخیم هیچ فایده ای برای فشرده شدن خاصی ندارد.

بنابراین در دستان درست، XML یک چیز قدرتمند و راحت است و به دلیل فراگیر بودن این قالب، به هیچ وجه نمی توانید از آن فرار کنید. پس بیایید به نوشتن کد برنامه بپردازیم.

برای برنامه نویسی از زبان اصلی پلتفرم دات نت - C# استفاده خواهیم کرد. برای اینکه هر چه بیشتر خوانندگان بتوانند خودشان با کد برنامه داده شده تمرین کنند، از اولین نسخه سی شارپ و دات نت فریم ورک استفاده خواهم کرد.


ثبت داده ها

اول، اجازه دهید در مورد نوشتن داده ها صحبت کنیم، زیرا، می دانید، برای خواندن چیزی از جایی، ابتدا باید چیزی را در جایی بنویسید. و از آنجایی که من و شما برنامه نویسی را شروع کردیم، ایجاد دستی داده های XML برای ما مناسب نیست. بنابراین اجازه دهید ابتدا با نوشتن داده ها در XML شروع کنیم.

ابتدا یک پروژه جدید در Visual Studio، #Develop یا C# Builder ایجاد کنید و System.Xml را به لیست فضاهای نام وارد شده اضافه کنید.

یک کلاس خاص، XmlTextWriter، مسئول نوشتن داده‌های XML در .NET Framework است که به شما اجازه می‌دهد تا داده‌های XML را در یک جریان دلخواه بنویسید، یعنی به طور کلی می‌توانیم از آن برای نوشتن آن‌ها در یک فایل، یک پایگاه داده استفاده کنیم و از طریق اینترنت برای شخصی ارسال کنید، اما اکنون همه چیز را روی یک فایل می نویسیم. stream من فکر می کنم قبلاً کمی جلوتر از خودم بوده ام.

String FileName = "c:\\demo.xml"; XmlTextWriter xml = XmlTextWriter جدید (FileName, System.Text.Encoding.Unicode); xml.Formatting = Formatting.Indented; xml.WriteStartDocument(); xml.WriteStartElement("rootelement"); برای (int i = 0; i< 10; i++) { xml.WriteStartElement("subelement"); xml.WriteAttributeString("attrib1", "value1"); xml.WriteAttributeString("attrib2", i.ToString()); for (int j = 0; j < 10; j++){ xml.WriteStartElement("subsubelement"); xml.WriteAttributeString("attr", j.ToString()); xml.WriteEndElement(); } xml.WriteEndElement(); } xml.WriteEndElement(); xml.WriteEndDocument(); xml.Close();

خط اول، من فکر می کنم، کاملاً واضح است - این به سادگی نام فایلی است که داده ها را در آن ذخیره می کنیم. بعد، یک شی از نوع XmlTextWriter ایجاد می کنیم (همانطور که می بینید، xml نامیده می شود) و با آن است که تمام عملیات های بعدی را انجام خواهیم داد. لطفاً توجه داشته باشید که هنگام ساخت یک شی، رمزگذاری را نیز مشخص می کنیم که XML در آن نوشته می شود: در مثال ما، این یونیکد است. خط بعدی، به طور کلی، مورد نیاز نیست، اما سند XML ما را، همانطور که می گویند، قابل خواندن برای انسان می کند، یعنی تورفتگی های لازم را اضافه می کند و آن را به خطوط تقسیم می کند. بدون این، کل سند در یک خط نوشته می شود، که اگرچه باعث صرفه جویی در فضا می شود، اما عملاً آن را برای ویرایش دستی نامناسب می کند.

نوشتن سند با فراخوانی متد WriteStartDocument() شی xml ما شروع می شود. خط زیر آن عنصر ریشه "rootelement" را به سند XML ما اضافه می کند (اجازه دهید یادآوری کنم که برای اسناد XML عنصر ریشه باید در یک نسخه وجود داشته باشد). در مرحله بعد، در یک چرخه، ده عنصر دیگر را که بار معنایی ندارند به سند XML خود اضافه می کنیم، که برای هر کدام دو ویژگی و ده عنصر فرعی دیگر تعیین می کنیم. لطفاً توجه داشته باشید که می‌توانیم بدون تبدیل صریح داده‌ها، عددی را به یک رشته اضافه کنیم، اما اگر عدد باید کاملاً یک رشته باشد، باید به‌صراحت با استفاده از متد ToString() تبدیل شود. همچنین توجه داشته باشید که ما باید به صراحت هر یک از عناصر سند XML خود و سپس کل سند را ببندیم.

اکنون که سند XML ما با موفقیت نوشته شده است، بیایید ببینیم چگونه می توانیم داده ها را از آن بخوانیم.


خواندن داده ها

یک کامپوننت listBox به فرم برنامه خود اضافه کنید (مگر اینکه یک برنامه کنسولی باشد) تا بتوانید نتیجه خواندن فایل XML را کنترل کنید. خوب، اگر برنامه شما یک برنامه کنسول است، به راحتی می توانید خروجی را به کنسول هدایت کنید.

طبق معمول ابتدا با کد برنامه آشنا می شویم و سپس بررسی می کنیم که این کد دقیقا چه کاری انجام می دهد.

XmlTextReader xml = XmlTextReader جدید (FileName); xml.WhitespaceHandling = WhitespaceHandling.None; int i = 0; while (xml.Read())( if ((xml.NodeType == XmlNodeType.Element) & (xml.Name == "subelement")) ( listBox1.Items.Add(" subelement " + i + " found") i++; listBox1.Items.Add("" + xml.GetAttribute("attrib1") )( listBox1.Items.Add(" " + xml.GetAttribute("attr")); ) ) ) xml.Close();

برای خواندن، همانطور که متوجه شده اید، از کلاس دیگری به نام XmlTextReader استفاده می کنیم. در همان فضای نام کلاسی است که برای نوشتن داده ها استفاده کردیم. در خط اول، نمونه‌ای از XmlTextReader با نام xml ایجاد می‌کنیم (در اینجا فرض می‌کنیم که متغیر FileName قبلاً توسط ما تعریف شده بود، اگر خطوط خالی به‌طور غیرقابل توضیحی در فایل XML ایجاد شده ظاهر شوند، از موارد زیر استفاده می‌کنیم). خط در قطعه کد داده شده از متغیر i برای شمارش تعداد عناصر "زیر عنصر" موجود در فایل XML که داده ها از آن خوانده می شوند استفاده می شود.

بعد چرخه خواندن مستقیم داده ها از فایل می آید. متد Read() عنصر بعدی سند XML را می خواند و پس از خواندن آن، بررسی می کنیم که دقیقا چه چیزی را خوانده ایم. اگر واقعاً یک عنصر "زیر المان" است، اطلاعات مربوط به عنصر خوانده شده را به listBox1 اضافه می کنیم، یک متغیر حاوی تعداد عناصر خوانده شده را افزایش می دهیم و سپس ویژگی های عنصر را می خوانیم. پس از خواندن ویژگی ها، یک حلقه جداگانه برای خواندن عناصر فرعی سازماندهی می کنیم (توجه داشته باشید که برای این کار نیازی به XmlTextReader جداگانه نداریم) و ویژگی های این عناصر فرعی مانند قبل، تمام اطلاعات خوانده شده را در listBox1 وارد می کنیم تا صحت آن را کنترل کنیم خواندن

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


پشت صحنه

به طور کلی، مثالی که ما به آن اشاره کردیم برای پروژه های واقعی بسیار ساده است. امروزه، هنگام خواندن اسناد XML، آنها معمولاً با استفاده از DTD، XML Schema یا Relax NG تأیید می شوند. اعتبارسنجی بررسی انطباق نشانه گذاری سند XML با برخی استانداردهای توصیف شده در یک فایل خارجی است. اعتبارسنجی مورد نیاز است تا تأیید سند به صورت سخت به الگوریتم برنامه متصل نشود، اما زمانی که قالب داده‌ها بدون به‌روزرسانی کد برنامه‌ای که داده‌ها را می‌خواند یا می‌نویسد تغییر می‌کند، می‌توان خودسرانه آن را تغییر داد. متأسفانه، اکنون ما زمانی برای بررسی اعتبارسنجی نخواهیم داشت، زیرا، همانطور که خودتان متوجه شدید، حجم مقاله روزنامه محدودیت های خاصی دارد.

یکی دیگر از نکات کاربردی جالب و مفید در مورد کار با داده های XML، تبدیل داده های XSL است. این تغییر زمانی روی داده ها اعمال می شود که در صفحات HTML نمایش داده می شوند و در واقع به سادگی یک الگوی صفحه وب خاص را روی یک فایل XML حاوی داده هایی اعمال می کنند. از آنجایی که سهم عمده استفاده کنونی از داده های XML به نوعی در شبکه جهانی وب است، بسیار بسیار خوب است که تبدیل های XSL را در نظر بگیریم.

بنابراین، من فکر می کنم، این مقاله ادامه خواهد داشت - اما، البته، فقط در صورتی که خودتان (یعنی خوانندگان اخبار رایانه) در مورد آن در انجمن یا در نامه ای به آدرس ایمیل من بپرسید. در حال حاضر، احتمالاً همه چیز مربوط به استفاده از XML در برنامه های NET است. امیدوارم این اطلاعات برای شما مفید باشد.