XML

bvcxz2

New member
XML

שלום לכולם, התחלתי ללמוד את השפה xml , ואני מעוניין לכתוב תוכנית ב c++ שמשתמשת במסמך xml כבסיס נתונים. ורציתי לדעת אם מישהו מכיר מדריך טוב (או אפילו דוגמאות של קוד) שילמד אותי איך לשלב בין ++c לxml , זאת אומרת איך אני ניגש לקובץ, קורא ממנו....
 

nirtheking

New member
XML לא נועד להיות מסד נתונים

אלא אם אתה מתכוון להשתמש במסד XML (שזה כבר משהו אחר) או בשרת XML. אני לא מבין ב-C++ אבל אני בטוח שגוגל יהיה לך לעזר
מצאתי את זה ב-google אולי זה יעזור: http://www.google.com/url?sa=U&start=1&q=http://www.oracle.com/technology/pub/articles/wang_ch.html&e=7507
 

idansof

New member
בגדול יש שתי דרכים לטיפול בXML

דרך ממשק SAX, ודרך ממשק DOM. SAX - Simple API for XML: בממשק SAX המפרש עובר על הקובץ כstream, ומבצע קריאה לפונקציות(בשפה פרוצדורלית) או לmethods(בשפת OO) בכל "אירוע" אשר הוא נתקל בקובץ, לדוגמא, פתיחה של אלמנט, סגירה של אלמנט, תוכן CDATA וכדומה. לדוגמא, עבור הקובץ הבא:
<books> <book> <name>Hello</name> <author>World></author> </book> </books>​
בהינתן אובייקט מסוג SAXHandler(שרירותית), יקראו הפונקציות הבאות:
handle.startElement("books"); handle.startElement("book"); handle.startElement("name"); handle.cdata("Hello"); handle.endElement("name"); handle.startElement("author"); handle.cdata("World"); handle.endElement("author"); handle.endElement("book"); handle.endElement("books");​
לצורך ההדגמה התעלמתי מהרווחים שנועד לייפות את הXML(שהם בעצם CDATA לכל דבר). היתרונות של SAX הם שאין צורך לקרוא את כל הקובץ לזיכרון, ותהליך הפירוש עצמו נחשב יעיל וחסכוני. החיסרון הוא כמובן שאין אפשרות לגישה רנדומלית לאלמנט מסוים, ועל המתכנת לשמר בעצמו את הstate awareness. DOM - Document Object Model בשיטה זו המפרש קורא את כל הקובץ לזיכרון, ומייצגו במבנה דמוי עצי, המאפשר גישה נוחה ומהירה למתכנת, על חשבון זמן מעבד וצריכת זיכרון כמובן, לדוגמא:
document.getElementsByTagName("book")​
יש מן הסתם לא מעט מפרשי XML לC++, ייתכן שתמצא את Xerces של פרוייקט אפאצי מתאים לך(למרות שהניסיון שלי איתו מועט, בפרט בגירסה שלו לC++)
 
למעלה