Classe XMLMapping - mapeamento XML (Word VBA)

A classe XMLMapping representa o mapeamento XML em um objeto ContentControl entre o XML personalizado e um controle de conteúdo. Um mapeamento XML é um vínculo entre o texto em um controle de conteúdo e um elemento XML no repositório de dados XML personalizado para esse documento. Para usar uma variável de classe XMLMapping, ela primeiro precisa ser instanciada por exemplo


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

CustomXMLNode

Retorna um objeto CustomXMLNode que representa o nó XML personalizado no repositório de dados para o qual o controle de conteúdo no documento é mapeado.


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

Retorna um objeto CustomXMLPart que representa a parte XML personalizada à qual o controle de conteúdo no documento é mapeado.


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

Exclui o mapeamento XML do controle de conteúdo pai.

Essa opção remove o mapeamento XML. Tanto os dados do XML quanto o controle de conteúdo permanecem no documento.


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

IsMapped

Retorna um Boolean que indica se o controle de conteúdo no documento é mapeado para um nó XML no repositório de dados XML do documento. Somente leitura.


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

PrefixMappings

Retorna uma cadeia de caracteres que representa os mapeamentos de prefixo usados para avaliar o XPath para o mapeamento XML atual. Somente leitura.

Para definir o mapeamento de um controle de conteúdo, utilize o método SetMapping ou o método SetMappingByNode.


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

SetMapping

Permite criar ou alterar o mapeamento XML em um controle de conteúdo. Retorna true se o Microsoft Word mapeia o controle de conteúdo para um nó XML personalizado no repositório de dados XML personalizado do documento.

Se o mapeamento XML já existir, o Word substituirá o mapeamento XML existente e o conteúdo do novo nó XML mapeado substituirá o texto do controle de conteúdo. Se o XPath especificado não for avaliado para um nó XML nas partes XML personalizadas especificadas, ainda será possível especificar o mapeamento e ele será criado. Esse mapeamento é vinculado automaticamente quando o XPath especificado for avaliado para um nó XML nas partes XML personalizadas especificadas. Consulte também o método SetMappingByNode.

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

O seguinte argumento é necessário

XPath (String) - Especifica uma sequência de caracteres do XPath que representa o nó XML ao qual o controle de conteúdo será mapeado. Uma sequência de caracteres do XPath inválida causa um erro em tempo de execução.

Optional arguments

Os seguintes argumentos são opcionais

PrefixMapping (String) - Especifica os mapeamentos de prefixo a serem utilizados durante a consulta da expressão fornecida no parâmetro XPath. Se for omitido, o Word utilizará o conjunto de mapeamentos de prefixo para a parte XML personalizada especificada no documento atual.

Source (Office.CustomXMLPart) - Especifica os dados XML personalizados desejados para a qual mapear o controle de conteúdo. Se esse parâmetro for omitido, o XPath é avaliado em relação a todos os XML personalizadas no documento atual e o mapeamento é estabelecido com o primeiro CustomXMLPart no qual o XPath resolve para um nó XML.

SetMappingByNode

Permite criar ou alterar o mapeamento de dados XML em um controle de conteúdo. Retorna true se o Microsoft Word mapeia o controle de conteúdo para um nó XML personalizado no repositório de dados XML personalizado do documento.

Se o mapeamento XML já existir, o Word substituirá o mapeamento XML existente e o conteúdo do novo nó XML mapeado substituirá o texto do controle de conteúdo. Consulte também o método SetMapping.

SetMappingByNode (Node)

Node: Especifica o nó XML ao qual o controle de conteúdo atual será mapeado.


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

Retorna uma cadeia de caracteres que representa o XPath para o mapeamento XML, que é avaliada como o nó XML mapeado no momento. Somente leitura.

Para definir o mapeamento de um controle de conteúdo, utilize o método SetMapping ou o método SetMappingByNode. Se o mapeamento não estiver ativo, a utilização dessa propriedade retornará um erro.


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