Classe XMLMapping (Word VBA)

La classe XMLMapping représente le mappage XML sur un objet ContentControl entre des données XML personnalisées et un contrôle de contenu.

Set

Pour utiliser une variable de classe XMLMapping, elle doit d'abord être instanciée, par exemple

Dim xml as XMLMapping
Set xml = ActiveDocument.Range.ContentControls(1).XMLMapping

Les variables du type XMLMapping peuvent être définies à l'aide de la procédure ContentControl.XMLMapping

CustomXMLNode

Renvoie un objet CustomXMLNode qui représente le nœud XML personnalisé dans la Banque de données sur laquelle le contrôle de contenu du document est mappé.

Dim objCC As ContentControl 
Dim objPart As CustomXMLPart 
Dim objNode As CustomXMLNode 
Dim objMap As XMLMapping 
 
Set objCC = ActiveDocument.ContentControls.Add(wdContentControlText) 
Set objPart = ActiveDocument.CustomXMLParts.Add("" & _ 
 "" & _ 
 "") 
 
Set objMap = objCC.XMLMapping 
objMap.SetMapping "/books/book/author", , objPart 
 
Set objNode = objMap.CustomXMLNode 
objNode.Text = "Matt Hink" 
 
objCC.Range.Text = objNode.Text

CustomXMLPart

Renvoie un objet CustomXMLPart qui représente la partie XML personnalisée sur laquelle le contrôle de contenu du document est mappé.

Dim objCC As ContentControl 
Dim objPart As CustomXMLPart 
Dim objNode As CustomXMLNode 
 
Set objCC = ActiveDocument.ContentControls(1) 
Set objPart = objCC.XMLMapping.CustomXMLPart 
Set objNode = objPart.SelectSingleNode("/books/book/title") 
objNode.Text = "Mystery of the Empty Chair"

Delete

Supprime le mappage XML du contrôle de contenu parent.

Cette opération permet de supprimer le mappage XML.

Dim objCC As ContentControl 
 
For Each objCC In ActiveDocument.ContentControls 
 If objCC.XMLMapping.IsMapped Then 
 objCC.XMLMapping.Delete 
 End If 
Next

IsMapped

Renvoie une valeur de type Boolean qui indique si le contrôle de contenu du document est mappé à un nœud XML dans le magasin de données XML du document.

Dim objCC As ContentControl 
 
For Each objCC In ActiveDocument.ContentControls 
 If objCC.XMLMapping.IsMapped Then 
 objCC.XMLMapping.Delete 
 End If 
Next

Parent

Renvoie un Object qui représente l'objet parent de l'objet XMLMapping spécifié.

Dim objParent As Object
Set objParent = ActiveDocument.Range.ContentControls(1).XMLMapping.Parent

PrefixMappings

Renvoie une chaîne qui représente les mappages de préfixes utilisés pour évaluer le XPath pour le mappage XML actuel.

Pour définir le mappage d'un contrôle de contenu, utilisez la méthode SetMapping ou SetMappingByNode.

Dim strPrefixMappings As String
strPrefixMappings = ActiveDocument.Range.ContentControls(1).XMLMapping.PrefixMappings

SetMapping

Permet de créer ou modifier le mappage XML sur un contrôle de contenu.

Si le mappage XML existe déjà, Word remplace le mappage XML existant et le contenu du nouveau nœud XML mappé remplace le texte du contrôle de contenu. Voir aussi la méthode SetMappingByNode.

Syntaxe : expression.SetMapping (XPath, PrefixMapping, Source)

Dim objRange As Range 
Dim objCustomPart As CustomXMLPart 
Dim objCustomControl As ContentControl 
 
Set objCustomPart = ActiveDocument.CustomXMLParts.Add 
objCustomPart.LoadXML ("Matt Hink" & _ 
 "Migration Paths of the Red Breasted Robin" & _ 
 "non-fiction29.95" & _ 
 "2/1/2007You see them in " & _ 
 "the spring outside your windows. You hear their lovely " & _ 
 "songs wafting in the warm spring air. Now follow the path " & _ 
 "of the red breasted robin as it migrates to warmer climes " & _ 
 "in the fall, and then back to your back yard in the spring." & _ 
 "") 
 
ActiveDocument.Range.InsertParagraphBefore 
Set objRange = ActiveDocument.Paragraphs(1).Range 
Set objCustomControl = ActiveDocument.ContentControls _ 
 .Add(wdContentControlText, objRange) 
objCustomControl.XMLMapping.SetMapping _ 
 "/books/book/title", , objCustomPart 
 
objRange.InsertParagraphAfter 
Set objRange = ActiveDocument.Paragraphs(2).Range 
Set objCustomControl = ActiveDocument.ContentControls _ 
 .Add(wdContentControlText, objRange) 
objCustomControl.XMLMapping.SetMapping _ 
 "/books/book/abstract", , objCustomPart

Arguments

Un argument nommé

XPath (String) - Spécifie une chaîne XPath qui représente le nœud XML sur lequel mapper le contrôle de contenu.

Les arguments suivants sont facultatifs

PrefixMapping (String) - Spécifie des mappages de préfixes à utiliser lors de la demande de l'expression fournie dans le paramètre XPath.

Source (Office.CustomXMLPart) - Spécifie les données XML personnalisées souhaitées sur lequel mapper le contrôle de contenu.

SetMappingByNode

Permet de créer ou modifier le mappage de données XML dans un contrôle de contenu.

Si le mappage XML existe déjà, Word remplace le mappage XML existant et le contenu du nouveau nœud XML mappé remplace le texte du contrôle de contenu.

Syntaxe : expression.SetMappingByNode (Node)

Node: Spécifie le nœud XML sur lequel mapper le contrôle de contenu actif.

Dim objcc As ContentControl 
Dim objNode As CustomXMLNode 
Dim objMap As XMLMapping 
Dim booMap As Boolean 
 
ActiveDocument.BuiltInDocumentProperties("Author").Value = "David Jaffe" 
 
Set objcc = ActiveDocument.ContentControls.Add _ 
 (wdContentControlDate, ActiveDocument.Paragraphs(1).Range) 
 
Set objNode = ActiveDocument.CustomXMLParts.SelectByNamespace _ 
 ("https://schemas.openxmlformats.org/package/2006/metadata/core-properties") _ 
 (1).DocumentElement.ChildNodes(1) 
 
Set objMap = objcc.XMLMapping 
booMap = objMap.SetMappingByNode(objNode)

XPath

Renvoie une chaîne qui représente le XPath du mappage XML, qui prend la valeur du nœud XML actuellement mappé.

Pour définir le mappage d'un contrôle de contenu, utilisez la méthode SetMapping ou SetMappingByNode.

Dim objCC As ContentControl 
Dim objMap As XMLMapping 
Dim booMap As Boolean 
 
Set objCC = ActiveDocument.ContentControls(1) 
Set objMap = objCC.XMLMapping 
 
If (objCC.Type = wdContentControlDate) And (objMap.XPath <> _ 
 "/ns1:coreProperties[1]/ns0:createdate[1]") Then 
 booMap = objMap.SetMapping(XPath:="/ns1:coreProperties[1]/ns0:createdate[1]") 
 
 If booMap = False Then 
 MsgBox "Unable to map the content control." 
 End If 
End If