בגדול יש שתי דרכים לטיפול ב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++)