כיצד לקרוא את נתוני XML מתוך קובץ על-ידי שימוש ב- Visual C++


עבור גירסת Microsoft Visual C# .NET של מאמר זה, ראה
307548 .

עבור גירסת Microsoft Visual Basic .NET של מאמר זה, ראה
301225 .

מאמר זה מתייחס ספריית המחלקות של Microsoft .NET Framework השמות הבאים:

System.xml

במשימה זו

סיכום


מאמר זה מתאר כיצד להשתמש המחלקה XmlTextReader כדי לקרוא את נתוני XML מתוך קובץ. המחלקה XmlTextReader מספק ישירה של ניתוח לאסימונים של נתוני XML. את
מחלקה XmlTextReader גם מיישם את המפרט XML 1.0, בנוסף מרחבי השמות, במפרט XML המוגדר על-ידי ה-World Wide Web Consortium (W3C). מאמר זה מתאר כיצד מהירה, tokenized גישה זרם נתוני ה-XML במקום באמצעות מודל אובייקטים, כגון מודל אובייקט של מסמך XML (DOM).

בחזרה לראש הדף

דרישות

מאמר זה מבוסס על ההנחה שאתה מכיר הנושאים הבאים:
  • מינוח XML
  • כיצד ליצור וכיצד לקרוא קובץ XML

הרשימה הבאה מתארת את מומלצים חומרה, תוכנה, תשתית רשת ו- service packs הדרוש לך:
  • Microsoft Visual Studio .NET
  • Microsoft Visual Studio 2005
בחזרה לראש הדף

לקרוא את נתוני XML מתוך קובץ

הדוגמה במאמר זה משתמש בקובץ בשם Books.xml. באפשרותך ליצור קובץ Books.xml משלך, או להשתמש בקובץ לדוגמה אשר נכלל עם התחלה מהירה של Kit (SDK) הפיתוח של Microsoft .NET תוכנה. הקובץ Books.xml זמין להורדה ממרכז ההורדות של Microsoft:עליך להעתיק את הקובץ Books.xml לתיקיה הפרוייקט.


כדי לקרוא את נתוני XML מתוך קובץ, בצע את הפעולות הבאות:
  1. התחל Visual Studio .NET 2002, Visual Studio .NET 2003 או Visual Studio 2005.
  2. בתפריט קובץ , הצבע על
    חדש, ולאחר מכן לחץ על הפרוייקט.

    את
    מופיעה תיבת הדו-שיח פרוייקט חדש .
  3. תחת סוגי פרוייקטים, לחץ על פרוייקטים של Visual C++.

    הערה ב- Visual Studio 2005, פרוייקטים של Visual C++ השתנה ל- Visual C++.
  4. תחת תבניות, לחץ
    יישום C++ מנוהל אם אתה משתמש ב- Visual Studio .NET 2002.

    תחת תבניות, לחץ על יישום המסוף (.NET) אם אתה משתמש ב- Visual Studio .NET 2003.


    תחת תבניות, לחץ על יישום מסוף ה-CLR אם אתה משתמש ב- Visual Studio 2005.
  5. בתיבה שם , הקלד
    Q815658, ולאחר מכן לחץ על אישור.
  6. הוסף הפניה ל- System.xml.dll בפרוייקט. לקבלת מידע נוסף אודות אופן ההוספה של הפניות אל פרוייקט Visual C++ מנוהלים, לחץ על מספר המאמר הבא כדי להציג את המאמר הרלוונטי מתוך Microsoft Knowledge Base:

    310674 כיצד לבצע: הוספת הפניות לפרוייקט Visual C++ מנוהל

  7. ציין את באמצעות הוראת במרחב השמות System::Xml כפי שמוצג להלן:
    using namespace System::Xml;
    עשה זאת כך שאין לך צורך לאשר את ההצהרות מחלקה XmlTextReader בקוד שלך. עליך להשתמש באמצעות הוראת לפני הצהרות אחרות.
  8. יצירת מופע של אובייקט XmlTextReader . אכלס את האובייקט XmlTextReader עם קובץ ה-xml.

    בדרך כלל, נעשה שימוש במחלקת XmlTextReader אם יש לך גישה לנתוני XML הגולמיים ללא התקורה של DOM. לכן, המחלקה XmlTextReader מספק דרך מהירה יותר לקרוא את נתוני ה-XML. המחלקה XmlTextReader יש בנאים אחר מציין המיקום של נתוני XML.

    הקוד הבא יוצר מופע של המחלקה XmlTextReader ולאחר מכן טוען את הקובץ Books.xml. הוסף את הקוד הבא אל הפונקציה _tmain :
    XmlTextReader* reader = new XmlTextReader ("books.xml");
    הערה ב- Visual C++ 2005, הפונקציה _tmain השתנה להפונקציה העיקרית .
  9. לקרוא את נתוני XML.

    הערה שלב זה מדגים ללולאה החיצונית בזמן . שני השלבים לבצע שלב זה מדגימים כיצד להשתמש הלולאה תוך כדי לקרוא את נתוני ה-XML.

    לאחר יצירת אובייקט XmlTextReader , משתמש בשיטת קריאה לקרוא את נתוני ה-XML.

    פעולת קריאה ממשיך ברצף להעביר באמצעות קובץ ה-xml עד פעולת קריאה מגיע לסוף הקובץ. כאשר פעולת קריאה מגיע לסוף הקובץ, פעולת קריאה מחזירה false.
    while (reader->Read()){
    // Do some work here on the data.
    Console::WriteLine(reader->Name);
    }
  10. בחן את הצמתים.

    כדי לעבד את נתוני XML, כל רשומה יש סוג צומת יכול להיקבע מתוך המאפיין סוג צומת . המאפיין שם ואת המאפיין ערך להחזיר את המידע הבא עבור הצומת הנוכחי או ברשומה הנוכחית:
    • שם צומת שהוא שם הרכיב ואת שם התכונה.
    • צומת הערך בטקסט הצומת.
    הספירה סוג צומת קובע את סוג הצומת. דוגמת הקוד הבאה מציגה את השם את הרכיבים ואת סוג המסמך. דוגמת הקוד הבאה מתעלם תכונות של רכיב:
    while (reader->Read()){
    switch (reader->NodeType)
    {
    case XmlNodeType::Element: // The node is an element.
    Console::Write("<{0}", reader->Name);
    Console::WriteLine(">");
    break;
    case XmlNodeType::Text: //Display the text in each element.
    Console::WriteLine (reader->Value);
    break;
    case XmlNodeType::EndElement: //Display the end of the element.
    Console::Write("</{0}", reader->Name);
    Console::WriteLine(">");
    break;
    }
    }
  11. בדוק את התכונות.

    סוגי צומת רכיב יכול לכלול רשימה של צמתי התכונה המשויכים לסוגי צומת רכיב. השיטה MovetoNextAttribute עובר כל תכונה ברכיב ברצף. השתמש במאפיין HasAttributes כדי מחשב אם הצומת יש תכונות כלשהן. המאפיין AttributeCount מחזיר את מספר התכונות עבור הצומת הנוכחי.
    while (reader->Read()){
    switch (reader->NodeType)
    {
    case XmlNodeType::Element: // The node is an element.
    Console::Write("<{0}", reader->Name);

    while (reader->MoveToNextAttribute()) // Read the attributes.
    Console::Write(" {0}='{1}'", reader->Name, reader->Value);
    Console::WriteLine(">");
    break;
    case XmlNodeType::Text: //Display the text in each element.
    Console::WriteLine (reader->Value);
    break;
    case XmlNodeType::EndElement: //Display the end of the element.
    Console::Write("</{0}", reader->Name);
    Console::WriteLine(">");
    break;
    }
    }
  12. שמור את הפתרון. לבנות את הפתרון.
  13. הקש CTRL + F5 להפעלת היישום לדוגמה.
בחזרה לראש הדף

הצגת קוד הושלם רישום ב- Visual Studio .NET 2002 או ב- Visual Studio .NET 2003

#include "stdafx.h"#include <tchar.h>

#using <mscorlib.dll>
#using <System.xml.dll>

using namespace System;
using namespace System::Xml;

void _tmain(void)
{
XmlTextReader* reader = new XmlTextReader ("books.xml");

while (reader->Read())
{
switch (reader->NodeType)
{
case XmlNodeType::Element: // The node is an element.
Console::Write("<{0}", reader->Name);

while (reader->MoveToNextAttribute()) // Read the attributes.
Console::Write(" {0}='{1}'", reader->Name, reader->Value);
Console::WriteLine(">");
break;
case XmlNodeType::Text: //Display the text in each element.
Console::WriteLine (reader->Value);
break;
case XmlNodeType::EndElement: //Display the end of the element.
Console::Write("</{0}", reader->Name);
Console::WriteLine(">");
break;
}
}
Console::ReadLine();
}
הערה עליך להוסיף נפוצות בזמן ריצה תמיכה מהדר האפשרות שפה (/ clr:oldSyntax) ב- Visual C++ 2005 בהצלחה להדר את דוגמת הקוד הקודם. כדי להוסיף נפוצות בזמן ריצה תמיכה מהדר האפשרות שפה ב- Visual C++ 2005, בצע את הפעולות הבאות:

  1. לחץ על פרוייקטולאחר מכן לחץ על מאפייני < שם פרוייקט > .



    הערה < שם פרוייקט > הוא מציין מיקום עבור השם של הפרוייקט.
  2. הרחב את תצורת המאפייניםולאחר מכן לחץ על כללי.

  3. לחץ כדי לבחור זמן הריצה של השפה נפוצות תמיכה, התחביר הישן (/ clr:oldSyntax) בהגדרה project תומך זמן הריצה של השפה נפוצות בחלונית השמאלית, לחץ על החלולאחר מכן לחץ על אישור.

לקבלת מידע נוסף אודות זמן הריצה של השפה נפוצות תומכים באפשרות מהדר, בקר באתר האינטרנט הבא של Microsoft:
/clr (ההידור של זמן הריצה של השפה נפוצים)
http://msdn2.microsoft.com/en-us/library/k8d11d4s.aspx
שלבים אלה חלים על מאמר שלם.

בחזרה לראש הדף

הצג את הפלט לדוגמה

הערה הקובץ Books.xml אשר נכלל עם התחלה מהירה של SDK .NET יש שני הבדלים מקובץ Books.xml מהקישור ההורדה המוזכרת בסעיף "קריאה מתוך קובץ נתוני ה-XML".
  • Books.xml מהקובץ קישור ההורדה אינו כולל
    התכונה publicationdate .
  • Books.xml מהקובץ קישור ההורדה אינו כולל
    התכונה ISBN .
<bookstore><book genre='autobiography' publicationdate='1981' ISBN='1-861003-11-0'>
<title>
The Autobiography of Benjamin Franklin
</title>
<author>
<first-name>
Benjamin
</first-name>
<last-name>
Franklin
</last-name>
</author>
<price>
8.99
</price>
</book>
<book genre='novel' publicationdate='1967' ISBN='0-201-63361-2'>
<title>
The Confidence Man
</title>
<author>
<first-name>
Herman
</first-name>
<last-name>
Melville
</last-name>
</author>
<price>
11.99
</price>
</book>
<book genre='philosophy' publicationdate='1991' ISBN='1-861001-57-6'>
<title>
The Gorgias
</title>
<author>
<name>
Plato
</name>
</author>
<price>
9.99
</price>
</book>
</bookstore>
בחזרה לראש הדף

פתרון בעיות

כאשר אתה מפעיל היישום לדוגמה, ייתכן שתקבל את הודעת השגיאה הבאה:

אירעה חריגה לא מטופלת מסוג System.Xml.XmlException System.xml.dll
מידע נוסף: שגיאת מערכת.
ייתכן שתקבל הודעת שגיאה זו אם אתה משתמש בקובץ Books.xml מהקישור ההורדה המוזכרת בסעיף "קריאה מתוך קובץ נתוני ה-XML". בעיה זו עלולה להתרחש אם הקובץ Books.xml כולל רווח לבן בתחילת הקובץ. כדי לפתור בעיה זו, פתח את הקובץ Books.xml באמצעות עורך טקסט ולאחר מכן הסר את הרווח הלבן.

בחזרה לראש הדף

הפניות


לקבלת מידע נוסף אודות קריאת XML עם XmlReader, בקר באתר האינטרנט הבא של Microsoft מפתח רשת (MSDN):בחזרה לראש הדף