Aspose.Words Document Object Model (DOM)

Les Aspose.Words Document Object Model (DOM) est une représentation en mémoire d’un document Word. Les Aspose.Words DOM vous permet de lire, manipuler et modifier programmatiquement le contenu et le formatage d’un document Word.

La présente section décrit les principales classes Aspose.Words DOM et leurs relations. En utilisant Aspose.Words DOM classes, vous pouvez obtenir un accès programmatique aux éléments de document et de formatage.

Créer un document Arbre d’objet

Lorsqu’un document est lu Aspose.Words DOM"> puis un arbre objet est construit et différents types d’éléments du document source ont leur propre DOM objets arborescents avec différentes propriétés.

Construire un arbre de nœuds de document

Quand Aspose.Words lit un document Word en mémoire, il crée des objets de différents types qui représentent différents éléments de document. Chaque fois qu’un texte, un paragraphe, une table ou une section est un nœud, et même le document lui-même est un nœud. Aspose.Words définit une classe pour chaque type de noeud document.

L’arbre de document dans Aspose.Words suit le modèle de conception composite:

  • Toutes les classes de nœuds dérivent finalement de la Node classe de base dans la classe Aspose.Words Document Object Model.
  • Les nœuds qui peuvent contenir d’autres nœuds, par exemple, Section ou Paragraph, provenant de CompositeNode classe, qui découle à son tour de la Node En cours.

Le diagramme ci-dessous montre l’héritage entre les classes de nœuds Aspose.Words Document Object Model (DOM). Les noms des classes abstraites sont en italique.

aspose-words-dom

Voyons un exemple. L’image suivante montre une Microsoft Word document avec différents types de contenu.

document-example

Lors de la lecture du document ci-dessus dans le Aspose.Words DOM, l’arborescence des objets est créée, comme indiqué dans le schéma ci-dessous.

document-example-dom

Document, Section, Paragraph, Table, Shape, Run, et toutes les autres ellipses du diagramme sont Aspose.Words objets qui représentent des éléments du document Word.

Prends une Node Type

Bien que Node la classe est suffisante pour distinguer différents nœuds les uns des autres, Aspose.Words fournit les NodeType énumération pour simplifier certains API tâches, telles que la sélection de nœuds d’un type spécifique.

Le type de chaque noeud peut être obtenu en utilisant le NodeType propriété. Cette propriété retourne une NodeType valeur de dénombrement. Par exemple, un noeud de paragraphe représenté par le Paragraph retour des classes NodeType.Paragraph, et un noeud de table représenté par Table retour des classes NodeType.Table.

L’exemple suivant montre comment obtenir un type de noeud en utilisant le NodeType énumération:

Navigation des arbres de documents

Aspose.Words représente un document comme un arbre de nœuds, ce qui vous permet de naviguer entre les nœuds. Cette section décrit comment explorer et naviguer l’arbre de document dans Aspose.Words.

Lorsque vous ouvrez l’échantillon de document, présenté plus tôt, dans l’Explorateur de documents, l’arborescence des noeuds apparaît exactement comme elle est représentée dans Aspose.Words.

document-in-document-explorer

Relations avec les nœuds de documents

Les nœuds de l’arbre ont des relations entre eux:

  • Un noeud contenant un autre noeud est un parent.
  • Oui. Le noeud contenu dans le noeud parent est un child. Les nœuds du même parent sont sibling les noeuds.
  • Les root le noeud est toujours le Document noeud.

Les noeuds qui peuvent contenir d’autres noeuds dérivent de la CompositeNode classe, et tous les noeuds dérivent finalement de la Node En cours. Ces deux classes de base fournissent des méthodes et des propriétés communes pour la navigation et la modification de la structure des arbres.

Le diagramme d’objets UML suivant montre plusieurs nœuds du document d’échantillon et leurs relations les uns avec les autres par l’intermédiaire des propriétés parent, enfant et frère et soeur:

document-nodes-relationships

Le document est le propriétaire du nœud

Un noeud appartient toujours à un document particulier, même s’il vient d’être créé ou retiré de l’arbre, parce que les structures vitales du document comme les styles et les listes sont stockées dans le Document noeud. Par exemple, il n’est pas possible Paragraph sans Document parce que chaque paragraphe a un style attribué qui est défini globalement pour le document. Cette règle est utilisée lors de la création de nouveaux nœuds. Ajouter un nouveau Paragraph directement au DOM exige un objet de document transmis au constructeur.

Lorsque vous créez un nouveau paragraphe en utilisant DocumentBuilder, le constructeur a toujours un Document classe liée à elle à travers la DocumentBuilder.Document propriété.

L’exemple de code suivant montre que lors de la création d’un nœud, un document qui sera propriétaire du nœud est toujours défini:

Noeud parent

Chaque noeud a un parent spécifié par le ParentNode propriété. Un noeud n’a pas de nœud parent, c’est-à-dire, ParentNode est nul, dans les cas suivants:

  • Oui. Le nœud vient d’être créé et n’a pas encore été ajouté à l’arbre.
  • Oui. Le nœud a été enlevé de l’arbre.
  • Oui. C’est la racine Document noeud qui a toujours un noeud parent nul.

Vous pouvez supprimer un noeud de son parent en appelant le Remove méthode. L’exemple de code suivant montre comment accéder au nœud parent:

Nœuds d’enfants

La façon la plus efficace d’accéder aux nœuds d’enfant d’un CompositeNode est via le FirstChild et LastChild propriétés qui renvoient les premier et dernier nœuds enfant, respectivement. S’il n’y a pas de nœud enfant, ces propriétés retournent null.

CompositeNode fournit également ChildNodes collecte permettant l’accès indexé ou énuméré aux nœuds enfants. Les ChildNodes propriété est une collection en direct de nœuds, ce qui signifie que chaque fois que le document est modifié, comme lorsque les nœuds sont supprimés ou ajoutés, ChildNodes la collecte est automatiquement mise à jour.

Si un noeud n’a pas d’enfant, ChildNodes propriété rend une collecte vide. Vous pouvez vérifier si les CompositeNode contient n’importe quel noeud enfant utilisant la HasChildNodes propriété.

L’exemple de code suivant montre comment énumérer les nœuds d’un enfant immédiat CompositeNode en utilisant le recenseur fourni par ChildNodes Recouvrement

L’exemple de code suivant montre comment énumérer les nœuds d’un enfant immédiat CompositeNode utilisant l’accès indexé & #160;:

Noeuds de sibling

Vous pouvez obtenir le noeud qui précède immédiatement ou suit un noeud particulier en utilisant le PreviousSibling et NextSibling propriétés, respectivement. Si un noeud est le dernier enfant de son parent, alors le NextSibling la propriété est null. Inversement, si le nœud est le premier enfant de son parent, PreviousSibling la propriété est null.

L’exemple de code suivant montre comment visiter efficacement tous les nœuds enfants directs et indirects d’un noeud composite:

Accès dactylographié aux nœuds de l ' enfant et des parents

Jusqu’à présent, nous avons discuté des propriétés qui renvoient l’un des types de base – Node ou CompositeNode. Mais il y a parfois des situations où vous pourriez avoir besoin de jeter des valeurs à une classe de nœuds spécifique, comme Run ou Paragraph. C’est-à-dire que vous ne pouvez pas vous éloigner complètement du casting quand vous travaillez avec le Aspose.Words DOM, qui est composite.

Pour réduire le besoin de coulée, la plupart Aspose.Words classes fournissent des propriétés et des collections qui fournissent un accès fortement typé. Il existe trois modèles de base d’accès dactylographié:

Les propriétés dactylographiées sont simplement des raccourcis utiles qui offrent parfois un accès plus facile que les propriétés génériques héritées de Node.ParentNode et CompositeNode.FirstChild.

L’exemple de code suivant montre comment utiliser les propriétés dactylographiées pour accéder aux nœuds de l’arborescence des documents: