Comment travailler avec le balisage XML personnalisé dans .NET

Comment travailler avec le balisage XML personnalisé dans .NET

Comment travailler avec le balisage personnalisé XML dans .NET

Un document Word peut contenir des données personnalisées XML à côté de son contenu visible — des données utilisées pour lier des contrôles de contenu, stocker des métadonnées spécifiques à l’application, ou incorporer des parties ajoutées par une autre application. Ce guide montre comment lire ces données, ajouter de nouvelles parties personnalisées XML, et inspecter les balises intelligentes héritées que les documents plus anciens peuvent encore contenir, en utilisant CustomXmlPart, CustomXmlProperty et SmartTag dans Aspose.Words FOSS pour .NET.


Guide étape par étape

Étape 1 : Lire les données personnalisées XML d’un document

Document.CustomXmlParts renvoie un CustomXmlPartCollection — le même mécanisme que Word utilise pour prendre en charge les contrôles de contenu mappés XML. Parcourez la collection, ou appelez GetById(id) lorsque vous savez déjà quelle partie vous faut, pour obtenir un CustomXmlPart. Chaque partie expose Id, un Data tableau d’octets contenant le XML brut, un DataChecksum permettant de détecter si les données ont changé sans une comparaison complète d’octets, et Schemas — un CustomXmlSchemaCollection répertoriant les schémas XML qui lui sont associés.


Étape 2 : Ajouter ou mettre à jour une partie personnalisée XML

Appelez CustomXmlPartCollection.Add(id, xml) avec une chaîne d’identifiant et le contenu XML pour créer directement une partie, ou construisez un CustomXmlPart séparément et transmettez-le à Add(part). Pour supprimer des données, utilisez RemoveAt(index) sur une position spécifique ou Clear() pour éliminer chaque partie. Lors de la copie de données XML personnalisées entre documents, utilisez CustomXmlPart.Clone() (ou le Clone() de la collection) sur la partie source plutôt que de relire et de réajouter le XML brut, puis ajoutez le clone au Document.CustomXmlParts du document cible.


Étape 3 : Gérer les schémas associés à une partie

CustomXmlPart.Schemas atteint un CustomXmlSchemaCollection, qui suit les URI de schéma associés à la partie sous forme de chaînes simples plutôt que d’objets de schéma analysés. Utilisez Add(value) pour enregistrer une URI de schéma, Remove(name) ou RemoveAt(index) pour en supprimer une, IndexOf(value) pour en localiser une, et Clear() pour les enlever toutes. Count indique le nombre d’URI de schéma actuellement associés à la partie.


Étape 4 : Travailler avec les parties personnalisées au niveau du package

Tous les éléments non visibles d’un package OOXML ne sont pas des XML personnalisés. Document.PackageCustomParts renvoie un CustomPartCollection d’objets CustomPart — des parties arbitraires stockées dans le package, telles que des parties ajoutées par une autre application qui a modifié le fichier. Chaque CustomPart possède un Name, un ContentType, un RelationshipType, un tableau d’octets Data, et un indicateur IsExternal indiquant s’il s’agit d’une référence externe plutôt que d’un contenu incorporé. Add(part), RemoveAt(index) et Clear() gèrent la collection de la même façon que CustomXmlPartCollection. Vérifiez PackageCustomParts — et non CustomXmlParts — lorsqu’une partie que votre document doit contenir n’apparaît pas dans la collection XML personnalisée.


Étape 5 : Inspecter les balises intelligentes héritées et leurs propriétés

SmartTag est un type de nœud (NodeType.SmartTag, construit avec SmartTag(doc)) représentant une balise intelligente Word héritée enveloppant du texte reconnu. Vérifiez Element et Uri ensemble pour identifier quel reconnaisseur a créé la balise, puis lisez Properties — un CustomXmlPropertyCollection — pour les données structurées que le reconnaisseur a attachées. Dans un CustomXmlPropertyCollection, l’indexeur (p. ex. properties["MyProp"]) ou Contains(name) recherchent une propriété spécifique, IndexOfKey(name) renvoie sa position, et Remove(name)/RemoveAt(index)/Clear() suppriment les entrées; chaque CustomXmlProperty est construit avec CustomXmlProperty(name, uri, value) et expose Name, Uri et Value. Parce que SmartTag dérive de CompositeNode, il participe également à l’arbre du document comme les autres nœuds, prenant en charge Accept(visitor), AcceptStart(visitor) et AcceptEnd(visitor) pour une traversée basée sur DocumentVisitor.


Problèmes courants et solutions

CustomXmlPartCollection.GetById(id) ne renvoie rien d’utilisable. L’identifiant ne correspond à aucune partie actuellement dans Document.CustomXmlParts. Énumérez la collection pour confirmer que l’identifiant est présent, ou ajoutez d’abord la partie avec Add(id, xml).

Une partie ajoutée par une autre application n’est pas trouvée en itérant CustomXmlParts. Les parties du package non-XML sont exposées via Document.PackageCustomParts, pas CustomXmlParts. Vérifiez PackageCustomParts (a CustomPartCollection) à la place.

SmartTag.Properties est vide même si la balise est clairement présente. Tous les reconnaisseurs de balises intelligentes n’attachent pas de propriétés structurées. Vérifiez SmartTag.Element and Uri pour confirmer quel reconnaisseur a créé la balise avant de supposer que des propriétés spécifiques seront présentes.

Les données personnalisées XML ne semblent pas liées au contrôle de contenu auquel elles devraient être liées. Les contrôles de contenu se lient aux XML personnalisés via leur propre configuration de liaison de données, pas automatiquement à chaque CustomXmlPart in Document.CustomXmlParts. Confirmez à quelle partie un contrôle de contenu donné est réellement lié plutôt que de supposer une relation un à un.


Questions fréquemment posées

Comment ajouter des données personnalisées XML à un document?

Appelez Document.CustomXmlParts.Add(id, xml) avec une chaîne d’id et le contenu XML, ou construisez un CustomXmlPart séparément et transmettez-le à Add(part).

Quelle est la différence entre CustomXmlPart et CustomXmlProperty ?

CustomXmlPart est une île de données XML complète — une charge utile de tableau d’octets plus les schémas associés — accessible via Document.CustomXmlParts. CustomXmlProperty est une paire nom/valeur unique, généralement accessible via SmartTag.Properties plutôt que directement depuis le document.

Comment copier des données personnalisées XML d’un document à un autre ?

Appelez Clone() sur le CustomXmlPart source, puis ajoutez le clone au Document.CustomXmlParts du document cible avec Add(part).

Qu’est-ce qu’un SmartTag, et quand pourrais-je en rencontrer un ?

SmartTag est une fonctionnalité héritée de Word représentant du texte reconnu et encapsulé par un reconniseur de smart-tag — un nœud de document (NodeType.SmartTag) avec un Element et un Uri identifiant le reconniseur, plus une collection Properties de valeurs CustomXmlProperty. Il apparaît dans les documents qui ont été créés ou modifiés avec les smart tags activés dans les versions antérieures de Word.

Comment savoir combien de parties XML personnalisées ou de parties de package un document possède ?

Lisez Count sur Document.CustomXmlParts (un CustomXmlPartCollection) ou Document.PackageCustomParts (un CustomPartCollection) respectivement.


Voir aussi

 Français