Aspose.Words מודל אובייקט מסמך (DOM)
מודל אובייקט המסמך Aspose.Words (DOM) הוא ייצוג בזיכרון של מסמך Word. Aspose.Words DOM מאפשר לך לקרוא, לתפעל ולשנות באופן פרוגרמטי את התוכן והעיצוב של מסמך Word.
החלק הזה מתאר את המעמדות העיקריים של Aspose.Words DOM ואת היחסים שלהם. על ידי שימוש בכיתות Aspose.Words DOM, תוכל לקבל גישה פרוגרמטית לרכיבי מסמך ולעיצוב.
צור עץ אובייקט מסמך
כאשר מסמך נקרא לתוך Aspose.Words DOM, אז עץ אובייקט נבנה וסוגים שונים של אלמנטים של מסמך המקור יש שלהם DOM אובייקטים עץ עם תכונות שונות.
בניית צמתי מסמכים עץ
כאשר Aspose.Words קורא מסמך Word לזיכרון, הוא יוצר אובייקטים מסוגים שונים המייצגים אלמנטים שונים של מסמך. כל ריצה של טקסט, פיסקה, טבלה או קטע היא צומת, ואפילו המסמך עצמו הוא צומת. Aspose.Words מגדיר מחלקה לכל סוג צומת מסמך.
עץ המסמך ב - Aspose.Words עוקב אחר דפוס העיצוב המורכב:
- כל כיתות הצומת נובעות בסופו של דבר מהכיתה Node, שהיא הכיתה הבסיסית במודל אובייקט המסמך Aspose.Words.
- צמתים שיכולים להכיל צמתים אחרים, למשל, Section או Paragraph, נובעים מהכיתה CompositeNode, אשר בתורו נובעת מהכיתה Node.
הדיאגרמה המוצגת להלן מראה ירושה בין כיתות צומת של מודל אובייקט המסמך Aspose.Words (DOM). שמות המעמדות המופשטים הם בכתב עוקף.
Node
.
בואו נסתכל על דוגמה. התמונה הבאה מציגה מסמך Microsoft Word עם סוגים שונים של תוכן.
כאשר קוראים את המסמך לעיל לתוך Aspose.Words DOM, עץ האובייקטים נוצר, כפי שמוצג בתרשים למטה.
Document, Section, Paragraph, Table, Shape, Run, וכל האליפסות האחרות בתרשים הן Aspose.Words אובייקטים המייצגים אלמנטים של המסמך Word.
קבל Node
סוג
למרות שהכיתה Node מספיקה מספיק כדי להבחין בין צמתים שונים זה מזה, Aspose.Words מספק את הספירה NodeType כדי לפשט כמה משימות API, כגון בחירת צמתים מסוג מסוים.
ניתן להשיג את סוג כל צומת באמצעות המאפיין NodeType. מאפיין זה מחזיר ערך ספירה NodeType. לדוגמה, צומת פסקה המייצגת על ידי Paragraph מחזירה את הכיתה NodeType.Paragraph, וצומת טבלה המייצגת על ידי Table מחזירה את הכיתה NodeType.Table.
הדוגמה הבאה מראה כיצד להשיג סוג צומת באמצעות הספירה NodeType:
ניווט בעץ המסמכים
Aspose.Words מייצג מסמך כעץ צומת, המאפשר לך לנווט בין צמתים. סעיף זה מתאר כיצד לחקור ולנווט בעץ המסמך ב Aspose.Words.
כאשר אתה פותח את המסמך לדוגמה, שהוצג קודם לכן, בסייר המסמכים, עץ הצומת מופיע בדיוק כפי שהוא מיוצג ב Aspose.Words.
קשרי צומת מסמכים
הצמתים בעץ יש יחסים ביניהם:
- צומת המכיל צומת אחר הוא parent.
- הצומת הכלולה בצומת ההורה היא child. צמתים של אותו הורה הם sibling צמתים.
- הצומת root היא תמיד הצומת Document.
הצמתים שיכולים להכיל צמתים אחרים נובעים מכיתה CompositeNode, וכל הצמתים נובעים בסופו של דבר מכיתה Node. שני סוגי הבסיס הללו מספקים שיטות ותכונות נפוצות לנווט ושינוי מבנה העץ.
דיאגרמת האובייקט UML הבאה מציגה כמה צמתים של מסמך המדגם ויחסיהם זה לזה באמצעות מאפייני ההורה, הילד והאח:
המסמך הוא בעל הצומת
צומת תמיד שייך למסמך מסוים, גם אם הוא נוצר או הוסר מהעץ, מכיוון שמבנים חיוניים בכל המסמך כגון סגנונות ורשימות מאוחסנים בצומת Document. לדוגמה, לא ניתן לקבל Paragraph ללא Document מכיוון שלכל פסקה יש סגנון מוקצה המוגדר באופן גלובלי עבור המסמך. כלל זה משמש בעת יצירת צמתים חדשים. הוספת Paragraph חדש ישירות ל DOM דורש אובייקט מסמך שהועבר לבנאי.
בעת יצירת פסקה חדשה באמצעות DocumentBuilder, לבונה תמיד יש מחלקה Document המקושרת אליה דרך המאפיין DocumentBuilder.Document.
דוגמת הקוד הבאה מראה שכאשר יוצרים כל צומת, מסמך שיהיה הבעלים של הצומת תמיד מוגדר:
צומת הורה
לכל צומת יש הורה שצוין על ידי המאפיין ParentNode. לצומת אין צומת אב, כלומר ParentNode הוא אפס, במקרים הבאים:
- הצומת נוצר זה עתה וטרם התווסף לעץ.
- הצומת הוסר מהעץ.
- זהו צומת השורש Document שתמיד יש לו צומת אב אפס.
ניתן להסיר צומת מההורה שלו על ידי קריאה לשיטת Remove.דוגמת הקוד הבאה מראה כיצד לגשת לצומת האב:
צמתים לילדים
הדרך היעילה ביותר לגשת לצמתים של ילד של CompositeNode היא באמצעות המאפיינים FirstChild ו LastChild שמחזירים את הצמתים של הילד הראשון והאחרון, בהתאמה. אם אין צמתים של ילדים, תכונות אלה חוזרות null.
CompositeNode
אם לצומת אין ילד, המאפיין ChildNodes מחזיר אוסף ריק. אתה יכול לבדוק אם CompositeNode מכיל צמתים של ילדים באמצעות המאפיין HasChildNodes.
דוגמת הקוד הבאה מראה כיצד למנות נקודות ילד מיידיות של CompositeNode
באמצעות המונה שמסופק על ידי אוסף ChildNodes
:
דוגמת הקוד הבאה מראה כיצד למנות נקודות ילד מיידיות של CompositeNode
באמצעות גישה ממוזגת:
צמתים אחים
אתה יכול להשיג את הצומת שמקדים מיד או עוקב אחר צומת מסוים באמצעות המאפיינים PreviousSibling ו NextSibling, בהתאמה. אם צומת הוא הילד האחרון של ההורה שלו, אז המאפיין NextSibling הוא null. לעומת זאת, אם הצומת הוא הילד הראשון של ההורה שלו, המאפיין PreviousSibling הוא null.
דוגמת הקוד הבאה מראה כיצד לבקר ביעילות בכל צמתים ישירים ועקיפים של צומת מורכב:
גישה מוקלדת לצמתים של ילדים והורים
עד כה דנו בתכונות המחזירות אחד מסוגי הבסיס – Node או CompositeNode. אבל לפעמים יש מצבים שבהם ייתכן שיהיה עליך להעביר ערכים למחלקת צומת ספציפית, כגון Run או Paragraph. כלומר, אתה לא יכול להתרחק לחלוטין מהיציקה כשאתה עובד עם Aspose.Words DOM, שהוא מורכב.
כדי להפחית את הצורך בגיסוי, רוב הכיתות Aspose.Words מספקות תכונות ואוספים המספקים גישה עם טיפוס חזק. יש שלושה דפוסים בסיסיים של גישה מודפסת:
- צומת אב חושף מאפיינים מוקלדים FirstXXX ו LastXXX. לדוגמה, Document יש FirstSection ו LastSection מאפיינים. באופן דומה, Table יש תכונות כגון FirstRow, LastRow, ואחרים.
- צומת הורה חושפת אוסף מודפס של צמתים ילדים, כגון Document.Sections, Body.Paragraphs ואחרים.
- צומת ילד מספק גישה מודפסת להורה שלו, כגון Run.ParentParagraph, Paragraph.ParentSection ואחרים.
מאפיינים מודפסים הם רק קיצורי דרך שימושיים שלפעמים מספקים גישה קלה יותר מאשר מאפיינים גנריים שירשו מ Node.ParentNode ו CompositeNode.FirstChild.
דוגמת הקוד הבאה מראה כיצד להשתמש בתכונות שהוקלדו כדי לגשת לצמתים של עץ המסמך: